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 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 |
|---|---|---|
| WHERE 條件 | 支持 | 不支持(全表) |
| 觸發器 | 觸發 | 不觸發 |
| 自增值重置 | 保留 | 歸 1 |
| 速度 | 慢(逐行) | 極快(Drop+Recreate) |
| 回滾 | 事務可回滾 | 不可回滾 |
-- 保留自增值的全表刪除技巧
DELETE FROM emp WHERE 1; -- 強制逐行掃描
-- 單字段更新
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 * 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;
-- 重命名表
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);
; 導致語句未結束DELETE/UPDATE 缺 WHERE 滅庫root 直連生產庫sql_mode 導致非標準行為