首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 入門完全指南:從連線、建庫建表、增刪改查到備份還原的零基礎實戰

     編輯:MySQL 資料庫相關知識

連線 MySQL 服務器

命令列客戶端

# 本地連線 (無密碼 root)
mysql -u root -p
# 提示輸入密碼,直接 Enter (初始無密碼)

# 本地連線 (有密碼)
mysql -u root -p'YourPass'   # -p 緊跟密碼無空格,含特殊字元建議單引號

# 遠程連線
mysql -h 192.168.1.100 -u app_user -p'Pass' -P 3306

# 退出
exit  或  \q  或  Ctrl+D

連線參數速查

參數含義範例
-h, --host主機地址-h localhost / 192.168.1.10
-u, --user用戶名-u root
-p, --password密碼 (不建議明文)-p 或 -p'secret'
-P, --port埠號-P 3306
-D, --database預設資料庫-D mydb
-e, --execute執行單條 SQL 後退出-e "SELECT VERSION()"
--default-character-set連線字元集--default-character-set=utf8mb4

用戶與權限管理

修改 root 密碼 (三種方式)

# 1. mysqladmin (客戶端工具)
mysqladmin -u root -p'old' password 'new'

# 2. SQL 語句 (需登入)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
FLUSH PRIVILEGES;

# 3. SET PASSWORD (舊版兼容)
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPass123!');

建立業務用戶 (最小權限原則)

-- 僅允許本地連線,擁有 mydb 所有權限
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON mydb.* TO 'app_user'@'localhost';

-- 允許特定 IP 段讀寫
CREATE USER 'readonly'@'192.168.1.%' IDENTIFIED BY 'ReadOnlyPass!';
GRANT SELECT ON mydb.* TO 'readonly'@'192.168.1.%';

-- 刪除用戶
DROP USER 'bad_user'@'%';

-- 查看權限
SHOW GRANTS FOR 'app_user'@'localhost';

資料庫與資料表核心操作

資料庫級

SHOW DATABASES;
CREATE DATABASE school CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE school;
DROP DATABASE school;  -- 謹慎!

資料表級 (以教師表為例)

CREATE TABLE teacher (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主鍵',
    name CHAR(10) NOT NULL COMMENT '姓名',
    address VARCHAR(50) DEFAULT '深圳' COMMENT '地址',
    hire_date DATE COMMENT '入職日期',
    salary DECIMAL(10,2) DEFAULT 0 COMMENT '薪資',
    is_active TINYINT(1) DEFAULT 1 COMMENT '在職狀態',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教師信息表';

-- 查看結構
DESC teacher;
SHOW CREATE TABLE teacher\G

-- 修改表結構
ALTER TABLE teacher ADD COLUMN email VARCHAR(100) AFTER name;
ALTER TABLE teacher MODIFY COLUMN name VARCHAR(20) NOT NULL;
ALTER TABLE teacher DROP COLUMN is_active;
ALTER TABLE teacher RENAME TO teachers;

數據操作 (CRUD) 核心語法

插入 (INSERT)

-- 完整欄位
INSERT INTO teacher (name, address, hire_date, salary)
VALUES ('張三', '深圳南山', '2020-01-15', 8000.00);

-- 批量插入 (高效)
INSERT INTO teacher (name, address, hire_date, salary) VALUES
('李四', '深圳福田', '2019-03-01', 9500.00),
('王五', '廣州天河', '2021-07-10', 7200.00),
('趙六', '北京海淀', '2018-11-20', 12000.00);

-- 指定主鍵 (慎用)
INSERT INTO teacher (id, name, ...) VALUES (100, '指定ID', ...);

查詢 (SELECT)

-- 全表
SELECT * FROM teacher;

-- 條件過濾
SELECT id, name, salary FROM teacher WHERE salary > 8000 AND is_active = 1;

-- 排序分頁
SELECT * FROM teacher ORDER BY hire_date DESC LIMIT 10 OFFSET 0;

-- 聚合統計
SELECT address, COUNT(*) AS cnt, AVG(salary) AS avg_sal
FROM teacher GROUP BY address HAVING cnt > 1;

更新 (UPDATE)

-- 單行
UPDATE teacher SET salary = 8500.00 WHERE id = 1;

-- 批量條件更新
UPDATE teacher SET salary = salary * 1.05 WHERE hire_date < '2020-01-01';

刪除 (DELETE)

-- 條件刪除
DELETE FROM teacher WHERE is_active = 0;

-- 清空表 (高效、重置自增、不可回滾)
TRUNCATE TABLE teacher;

文本數據導入導出

LOAD DATA 導入 (極速)

-- 數據文件 teacher.txt (Tab 分隔,NULL 用 \N)
# 1	張三	深圳南山	2020-01-15	8000.00
# 2	李四	深圳福田	2019-03-01	9500.00

LOAD DATA LOCAL INFILE 'teacher.txt'
INTO TABLE teacher
CHARACTER SET utf8mb4
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, name, address, hire_date, salary);

SELECT ... INTO OUTFILE 導出

SELECT id, name, address, hire_date, salary
FROM teacher
INTO OUTFILE '/tmp/teacher_export.txt'
CHARACTER SET utf8mb4
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';

備份與還原 (生產級工具 mysqldump)

邏輯備份

# 單庫備份 (含結構+數據,多行 INSERT,單事務)
mysqldump --single-transaction --routines --triggers --events \
  -u root -p school > school_$(date +%F).sql

# 多庫備份
mysqldump --databases school hr finance > multi_db.sql

# 全量備份 (含系統庫)
mysqldump --all-databases > full_backup.sql

# 僅結構
mysqldump --no-data -u root -p school > school_structure.sql

# 僅數據
mysqldump --no-create-info -u root -p school > school_data.sql

還原

# 還原單庫 (需先建庫)
mysql -u root -p -e "CREATE DATABASE school CHARACTER SET utf8mb4;"
mysql -u root -p school < school_2024-01-15.sql

# 還原多庫/全量
mysql -u root -p < multi_db.sql

# 異機還原 (流式傳輸,無中間文件)
mysqldump -h src_host -u root -p school | mysql -h dst_host -u root -p school

常用 SHOW/DESC 信息收集命令

命令用途
SHOW DATABASES;列出所有庫
SHOW TABLES [FROM db_name];列出表
DESC table_name;表結構
SHOW CREATE TABLE table_name\G完整建表 SQL
SHOW INDEX FROM table_name;索引詳情
SHOW TABLE STATUS [FROM db_name];表統計 (行數、大小、自增值)
SHOW PROCESSLIST;當前線程活動
SHOW VARIABLES LIKE 'max_connections';配置參數查看
SHOW GLOBAL STATUS LIKE 'Threads_connected';運行狀態指標

新手避坑 10 條

  1. 分號結尾:SQL 語句必須以 `;` 或 `\g` 結束,多行輸入以分號為準。
  2. 反引號保護:表名、欄位名用 `` ` `` 包裹,防止保留字衝突:`SELECT \`select\` FROM \`order\`;`
  3. 字元集統一:庫/表/連線/應用**全鏈路 utf8mb4**,避免亂碼。
  4. 主鍵必備:每張表**必須**有主鍵 (最好是自增整數),InnoDB 聚簇索引依賴主鍵。
  5. 避免 SELECT *:顯式列出欄位,減少 I/O、網絡、內存開銷。
  6. WHERE 欄位加索引:高頻查詢欄位建立索引,EXPLAIN 驗證 type=ref/range。
  7. 事務邊界清晰:InnoDB 預設自動提交,多步操作显式 `START TRANSACTION; ... COMMIT;`。
  8. 備份驗證:定期測試還原,**未驗證的備份 = 沒有備份**。
  9. 權限最小化:應用用戶僅授予必要庫/表權限,嚴禁 root 直連應用。
  10. 善用 \G 縱向顯示:寬表 `SHOW CREATE TABLE t\G` 避免換行難讀。

MySQL 入門看似命令繁多,實則邏輯自洽:**連線 → 權限 → 結構 → 數據 → 備份** 五環相扣。掌握上述核心命令與避坑原則,配合 `mysql --help`、`SHOW VARIABLES`、官方文檔,即可從零構建起專業級 MySQL 使用能力,為進階調優、架構設計打下堅實基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved