整理開發高頻使用的 MySQL 語句,涵蓋庫表管理、數據增刪改查、連接查詢、約束操作、常用函數等,採用大寫關鍵字提升可讀性,適合作為桌面參考卡片。
CREATE DATABASE mysql_db;
DROP DATABASE mysql_db;
SHOW DATABASES;
USE mysql_db;
-- 創建表
CREATE TABLE user (
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) UNIQUE NOT NULL,
sex ENUM('1','2','3') NOT NULL DEFAULT '3'
);
-- 查看結構
DESC user;
SHOW CREATE TABLE user;
-- 修改表結構
ALTER TABLE user RENAME TO users; -- 修改表名
ALTER TABLE user ADD age SMALLINT UNSIGNED DEFAULT 18 AFTER sex; -- 增加列
ALTER TABLE user DROP COLUMN sex; -- 刪除列
ALTER TABLE user CHANGE age a_ge TINYINT UNSIGNED AFTER id; -- 修改列名/類型/位置
-- 主鍵
ALTER TABLE t ADD PRIMARY KEY (id);
ALTER TABLE t DROP PRIMARY KEY;
-- 唯一索引
ALTER TABLE t ADD UNIQUE (email);
ALTER TABLE t DROP INDEX email;
-- 外鍵(父表 user,子表 privinces)
CREATE TABLE privinces (
pid SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
uid SMALLINT,
FOREIGN KEY (uid) REFERENCES user(id) ON DELETE CASCADE
);
-- 刪除外鍵:先 SHOW CREATE TABLE 獲取約束名,再 ALTER TABLE t DROP FOREIGN KEY fk_name;
-- 插入
INSERT INTO user(username) VALUES ('John');
INSERT INTO user(id, username, sex) VALUES (1, 'Tom', 1);
-- 更新
UPDATE user SET age = age + 5, sex = 1 WHERE id = 2;
-- 刪除
DELETE FROM user WHERE id = 3;
TRUNCATE TABLE user; -- 清空表保留結構
-- 多表更新
UPDATE user u INNER JOIN privinces p ON u.province = p.pname
SET u.province = p.pid;
SELECT [DISTINCT] col1, col2
FROM table
[WHERE condition]
[GROUP BY col [HAVING condition]]
[ORDER BY col [ASC|DESC]]
[LIMIT offset, row_count];
SELECT * FROM user LIMIT 10, 20(第 11-30 行)SELECT DISTINCT dept FROM employeeSELECT * FROM user WHERE name LIKE 'Zhang%'WHERE col IS NULL / IS NOT NULLWHERE id BETWEEN 1 AND 100 / WHERE id IN (1,2,3)-- 內連接
SELECT u.*, p.pname FROM user u INNER JOIN privinces p ON u.pid = p.pid;
-- 左外連接(保留左表所有行)
SELECT u.*, p.pname FROM user u LEFT JOIN privinces p ON u.pid = p.pid;
-- 右外連接
SELECT u.*, p.pname FROM user u RIGHT JOIN privinces p ON u.pid = p.pid;
SELECT * FROM user
WHERE userid = ANY (SELECT uid FROM privinces WHERE pname = '河南');
SELECT * FROM user
WHERE userid IN (SELECT uid FROM privinces WHERE pname = '河南');
| 分類 | 函數 | 示例 |
|---|---|---|
| 字符串 | CONCAT | CONCAT('I','LOVE','YOU') → 'ILOVEYOU' |
| CONCAT_WS | CONCAT_WS('|','A','B') → 'A|B' | |
| SUBSTRING | SUBSTRING('MYSQL',1,2) → 'MY' | |
| REPLACE | REPLACE('M??Y??SQL','?','*') → 'M**Y**SQL' | |
| TRIM | TRIM(' abc ') → 'abc' | |
| 數值 | ROUND | ROUND(3.562,1) → 3.6 |
| CEIL/FLOOR | CEIL(3.2)→4 / FLOOR(3.8)→3 | |
| MOD | MOD(10,3) → 1 | |
| POWER | POWER(2,3) → 8 | |
| TRUNCATE | TRUNCATE(125.89,1) → 125.8 | |
| 日期時間 | NOW / CURDATE / CURTIME | 當前日期時間 / 日期 / 時間 |
| DATE_ADD | DATE_ADD('2023-01-01', INTERVAL 1 DAY) | |
| DATEDIFF | DATEDIFF('2023-01-10','2023-01-01') → 9 | |
| DATE_FORMAT | DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i') | |
| UNIX_TIMESTAMP | UNIX_TIMESTAMP() / FROM_UNIXTIME(1672531200) |
CREATE TABLE new_tbl SELECT * FROM old_tbl WHERE status=1;CREATE TABLE new_tbl LIKE old_tbl;SHOW INDEX FROM tbl\GALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4;