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

MySQL 從入門到實戰:零基礎手把手教學(含完整增刪改查案例)

     編輯:MySQL 資料庫相關知識

環境準備與登錄

Windows 安裝要點

  • 記住 root 密碼、安裝路徑(如 C:\Program Files\MySQL\MySQL Server 8.0\)
  • 安裝後將 bin 目錄加入系統 PATH

命令行登錄

# 本機登錄
mysql -u root -p
# 遠程登錄
mysql -h 192.168.1.100 -u app_user -p -P 3306

常用交互命令:status(版本信息)、quit/exit、help、\\c(取消當前語句)

數據庫全生命周期操作

-- 查看版本與時間
SELECT VERSION(), CURRENT_DATE;

-- 創建/切換/查看當前庫
CREATE DATABASE demo CHARSET utf8mb4;
USE demo;
SELECT DATABASE();

-- 刪除庫
DROP DATABASE demo;

表設計與建表範例

CREATE TABLE emp (
  emp_id     VARCHAR(6)  NOT NULL COMMENT '工號',
  emp_name   VARCHAR(20) NOT NULL COMMENT '姓名',
  emp_age    TINYINT UNSIGNED COMMENT '年齡',
  emp_sal    INT UNSIGNED COMMENT '薪資',
  emp_bir    DATE COMMENT '出生日期',
  emp_sex    ENUM('male','female') COMMENT '性別',
  PRIMARY KEY (emp_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='員工表';

驗證:SHOW TABLES; / DESC emp; / SHOW CREATE TABLE emp\G

增:INSERT 多種姿勢

-- 單行(列名可省略,但建議顯式寫出)
INSERT INTO emp (emp_id, emp_name, emp_age, emp_sal, emp_bir, emp_sex)
VALUES ('100001', '紅楓', 29, 8000, '1977-01-01', 'male');

-- 批量插入(高效,單條 SQL)
INSERT INTO emp (emp_id, emp_name, emp_age, emp_sal, emp_bir, emp_sex) VALUES
('100002', '麗鵑', 27, 7000, '1979-12-31', 'female'),
('100003', '小紅', 30, 8000, '1976-11-11', 'female');

-- 插入查詢結果
INSERT INTO emp_archive SELECT * FROM emp WHERE emp_bir < '1980-01-01';

刪:DELETE 與 TRUNCATE

特性DELETETRUNCATE
WHERE 條件支持不支持(全表)
觸發器觸發不觸發
自增值重置保留歸 1
速度慢(逐行)極快(Drop+Recreate)
回滾事務可回滾不可回滾
-- 保留自增值的全表刪除技巧
DELETE FROM emp WHERE 1;  -- 強制逐行掃描

改:UPDATE 精準控制

-- 單字段更新
UPDATE emp SET emp_sal = emp_sal + 1000 WHERE emp_id = '100001';

-- 多字段更新
UPDATE emp SET emp_sal = 9000, emp_age = 30 WHERE emp_name = '紅楓';

-- 無 WHERE 警示:將更新全表!
-- UPDATE emp SET emp_sal = 5000;  -- 危險操作

查:SELECT 進階技法

條件過濾

SELECT * FROM emp WHERE emp_sal > 5000;
SELECT * FROM emp WHERE emp_bir BETWEEN '1978-01-01' AND '1979-12-31';
SELECT * FROM emp WHERE emp_name LIKE '紅%';

投影與別名

SELECT emp_name AS 姓名, emp_sal AS 薪資 FROM emp;
SELECT CONCAT(emp_id, ' ', emp_name) AS info FROM emp;

排序與分頁

-- 升序/降序
SELECT * FROM emp ORDER BY emp_sal DESC;

-- 分頁(LIMIT offset, rows)
SELECT * FROM emp ORDER BY emp_sal DESC LIMIT 0, 10;  -- 第 1 頁
SELECT * FROM emp ORDER BY emp_sal DESC LIMIT 10, 10; -- 第 2 頁

-- 隨機抽樣
SELECT * FROM emp ORDER BY RAND() LIMIT 3;

聚合統計

SELECT COUNT(*) AS 總人數 FROM emp;
SELECT emp_sex, COUNT(*) AS 人數 FROM emp GROUP BY emp_sex;
SELECT MIN(emp_sal), MAX(emp_sal), AVG(emp_sal), SUM(emp_sal) FROM emp;

日期運算

-- 提取組件
SELECT * FROM emp WHERE MONTH(emp_bir) = 7;
SELECT * FROM emp WHERE MONTHNAME(emp_bir) = 'January';

-- 年齡/天數計算
SELECT emp_name, DATEDIFF(CURDATE(), emp_bir) AS living_days FROM emp;

-- 日期加減
SELECT DATE_ADD(NOW(), INTERVAL 100 DAY);
SELECT DATE_SUB(NOW(), INTERVAL 100 DAY);

多表連接

-- 內連接(標準寫法)
SELECT e.emp_name, d.dept_name
FROM emp e
JOIN dept d ON e.emp_id = d.dept_id;

-- 左連接(保留左表所有行)
SELECT e.emp_name, d.dept_name
FROM emp e
LEFT JOIN dept d ON e.emp_id = d.dept_id;

表結構變更(DDL)

-- 重命名表
ALTER TABLE emp RENAME TO employee;

-- 增加列
ALTER TABLE employee ADD COLUMN email VARCHAR(100);

-- 修改列類型/屬性
ALTER TABLE employee MODIFY COLUMN email VARCHAR(200) NOT NULL DEFAULT '';

-- 刪除列
ALTER TABLE employee DROP COLUMN email;

-- 增加索引
ALTER TABLE employee ADD INDEX idx_name (emp_name);

新手避坑十條

  1. 忘記分號 ; 導致語句未結束
  2. 字符串未加引號、標識符用錯引號
  3. DELETE/UPDATE 缺 WHERE 滅庫
  4. 字符集不統一(庫/表/連接/應用)產生亂碼
  5. 用 root 直連生產庫
  6. 無索引大表全掃描拖垮實例
  7. 備份不驗證、不演練恢復
  8. 忽略 sql_mode 導致非標準行為
  9. 不監控慢查詢、連接數、磁盤空間
  10. 文檔缺失:表結構、業務邏輯、權限矩陣無人知曉
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved