數據庫 是按數據結構組織、存儲和管理數據的倉庫。六十多年發展歷程,從簡單表格到海量分布式系統,核心價值:持久化存儲 + 高效檢索 + 並發控制 + 數據完整性。
本系列聚焦 MySQL/MariaDB。
軟件系統,提供:
客戶端通過協議 (TCP/IP、Socket) 發送 SQL,Server 執行並返回結果。
https://dev.mysql.com/downloads/mysql/
MSI 安裝包一鍵下一步,配置服務名、端口、root 密碼、字符集。參考:Windows 圖文教程
快速嘗試:
# CentOS/RHEL yum install -y mariadb-server systemctl start mariadb systemctl enable mariadb mysql_secure_installation # Ubuntu apt-get update && apt-get install -y mysql-server systemctl start mysql mysql_secure_installation
mysql -uroot -p -e "SELECT VERSION();" # 或 mysqladmin -uroot -p version
mysql -h host -P port -u user -p[password] -D database # 例 mysql -uroot -p mysql -h 10.0.0.1 -P 3306 -u dba -p -D test_db
| 錯誤 | 原因 | 解決 |
|---|---|---|
| ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' | 服務未啟動或 socket 路徑不匹配 | systemctl start mysqld;檢查 my.cnf socket 參數 |
| ERROR 1045 (28000): Access denied for user 'root'@'localhost' | 密碼錯誤或無權限 | 重置密碼 (見後文) |
| ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed to connect | 用戶無該主機授權 | GRANT ... TO 'user'@'%' ... |
QUIT EXIT \q Ctrl+D
| 操作 | SQL | 說明 |
|---|---|---|
| 查看所有庫 | SHOW DATABASES; | 系統庫:mysql(權限)、information_schema(元數據)、performance_schema(性能)、sys(診斷) |
| 創建庫 (UTF-8) | CREATE DATABASE db_name DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; | 推薦 utf8mb4 支持 Emoji |
| 刪除庫 | DROP DATABASE db_name; | 不可逆,慎用 |
| 切換庫 | USE db_name; | 后續操作默認在該庫 |
| 查看當前庫 | SELECT DATABASE(); | -- |
| 業務場景 | 推薦類型 | 關鍵點 |
|---|---|---|
| 主鍵 ID | BIGINT UNSIGNED AUTO_INCREMENT | 足夠大、無符號、自增 |
| 金額/價格 | DECIMAL(10,2) | 精確計算,避免浮點誤差 |
| 狀態/枚舉 | TINYINT UNSIGNED 或 ENUM | 小整數高效,ENUM 限制值域 |
| 長文本/JSON | TEXT / LONGTEXT / JSON (5.7+) | JSON 類型支持索引虛擬列 |
| 時間戳 | DATETIME (應用層時區) / TIMESTAMP (自動更新) | DATETIME 範圍更大,無 2038 年問題 |
| 短字符串 (定長) | CHAR(n) | 如 MD5、UUID、國家代碼 |
| 變長字符串 | VARCHAR(n) | n 為字符數,實際存儲長度+1/2字節 |
CREATE TABLE `user_account` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵', `username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用戶名', `password_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT 'SHA256 密碼哈希', `email` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '郵箱', `balance` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '賬戶餘額', `status` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1正常 0禁用', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`), KEY `idx_email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶賬戶表';
| 操作 | SQL |
|---|---|
| 查看表結構 | DESC tbl_name; / SHOW CREATE TABLE tbl_name\G |
| 查看所有表 | SHOW TABLES; (需先 USE db) |
| 刪除表 | DROP TABLE tbl_name; |
| 重命名表 | ALTER TABLE old_name RENAME new_name; |
| 添加列 | ALTER TABLE tbl ADD col_name TYPE [COMMENT '...']; |
| 刪除列 | ALTER TABLE tbl DROP COLUMN col_name; |
| 修改列類型 | ALTER TABLE tbl MODIFY col_name NEW_TYPE; |
| 重命名列 | ALTER TABLE tbl CHANGE old_col new_col NEW_TYPE; |
用戶名@主機同一用戶名、不同主機視為不同用戶。主機支持通配符 % (任意)、10.0.0.% (網段)、localhost (本地 Socket)、127.0.0.1 (本地 TCP)。
-- 創建 CREATE USER 'app_user'@'10.0.0.%' IDENTIFIED BY 'StrongPass!23'; -- 刪除 DROP USER 'app_user'@'10.0.0.%'; -- 重命名 RENAME USER 'app_user'@'10.0.0.%' TO 'app_user_v2'@'10.0.0.%'; -- 修改密碼 (5.7+) ALTER USER 'app_user'@'10.0.0.%' IDENTIFIED BY 'NewStrongPass!23'; -- 或 SET PASSWORD FOR 'app_user'@'10.0.0.%' = 'NewStrongPass!23'; FLUSH PRIVILEGES;
| 層級 | 範圍 | 典型授權示例 |
|---|---|---|
| 全局 | *.* | GRANT ALL PRIVILEGES ON *.* TO 'dba'@'10.0.0.%' WITH GRANT OPTION; |
| 庫級 | db.* | GRANT SELECT, INSERT, UPDATE ON app_db.* TO 'app_user'@'10.0.0.%'; |
| 表級 | db.tbl | GRANT SELECT (id, name) ON app_db.users TO 'report_user'@'10.0.0.%'; |
| 列級 | db.tbl(col) | 同上,列級權限 |
| 程序級 | PROCEDURE/FUNCTION | GRANT EXECUTE ON PROCEDURE app_db.sp_x TO 'app_user'@'10.0.0.%'; |
REVOKE SELECT ON app_db.* FROM 'app_user'@'10.0.0.%'; REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'app_user'@'10.0.0.%'; FLUSH PRIVILEGES; -- 必須執行使修改生效
user@host,驗證密碼/插件SUPER 權限的用戶不受 read_only 限制本文建立了 MySQL 從概念認知 → 安裝驗證 → 連接交互 → 庫表構建 → 用戶授權的完整入門知識鏈。關鍵落地動作:
下篇將進階講解:視圖、存儲過程、函數、事務、觸發器、動態 SQL、索引原理與優化、備份恢復策略、主從複制拓撲。敬請期待!