MySQL DDL/DML 核心操作速查,含資料庫/資料表生命週期、欄位屬性變更、五大約束 (PK/UK/CK/DFK/FK)、資料匯入導出、PHP 操作範例。
CREATE DATABASE school;
USE school;
CREATE TABLE student (
id INT,
name VARCHAR(20),
sex CHAR(2),
age INT,
dt DATETIME,
info TEXT,
bak VARCHAR(500)
);
-- 查看結構
DESC student; -- 或 SHOW CREATE TABLE student
-- 新增欄位
ALTER TABLE student ADD tel VARCHAR(20);
-- 刪除欄位
ALTER TABLE student DROP COLUMN bak;
-- 修改欄位名
ALTER TABLE student CHANGE sex sex2 CHAR(2); -- MySQL 語法
-- 或標準 SQL (8.0+)
ALTER TABLE student RENAME COLUMN sex TO sex2;
-- 修改資料類型
ALTER TABLE student MODIFY age CHAR(20); -- MySQL
-- ALTER TABLE student ALTER COLUMN age TYPE CHAR(20); -- PostgreSQL
-- 刪除表
DROP TABLE student;
CREATE TABLE biao (
id INT PRIMARY KEY,
name VARCHAR(20),
sex CHAR(2) CHECK (sex='男' OR sex='女'), -- 檢查約束 (8.0.16+ 生效)
age INT,
dt DATETIME,
info TEXT,
tel CHAR(16) UNIQUE, -- 唯一約束
bak VARCHAR(500) DEFAULT '我是學生' -- 預設約束
);
-- 建表後新增主鍵
ALTER TABLE grade ADD CONSTRAINT pk_grade PRIMARY KEY (id);
-- 新增唯一約束
ALTER TABLE grade ADD CONSTRAINT uk_tel UNIQUE (tel);
-- 新增檢查約束
ALTER TABLE grade ADD CONSTRAINT chk_sex CHECK (sex IN ('男','女'));
-- 新增預設值
ALTER TABLE grade ADD CONSTRAINT df_bak DEFAULT '我是好學生' FOR bak;
-- 查看約束
SHOW CREATE TABLE grade; -- 或 SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME='grade';
-- 刪除約束
ALTER TABLE grade DROP CONSTRAINT df_bak;
CREATE TABLE shop_jb (
id INT PRIMARY KEY,
name1 VARCHAR(20), spec VARCHAR(20), stock INT, price FLOAT, dt DATETIME DEFAULT '2010-07-06'
);
CREATE TABLE shop_yw (
ywid INT PRIMARY KEY,
name2 VARCHAR(20),
sex CHAR(2) CHECK (sex IN ('男','女')),
age INT,
tel VARCHAR(18) UNIQUE,
address VARCHAR(20)
);
CREATE TABLE shop_xs (
id INT NOT NULL,
sale CHAR(20), quantity CHAR(20), dt2 DATETIME DEFAULT '2010-05-03',
ywid INT,
FOREIGN KEY (id) REFERENCES shop_jb(id),
FOREIGN KEY (ywid) REFERENCES shop_yw(ywid)
);
| 操作 | MySQL 語法 |
|---|---|
| 新增欄位 | ALTER TABLE t ADD COLUMN c type DEFAULT val; |
| 修改欄位名+類型+預設值 | ALTER TABLE t CHANGE old_c new_c type DEFAULT val; |
| 僅修改預設值 | ALTER TABLE t ALTER COLUMN c SET DEFAULT val; |
| 僅修改類型 | ALTER TABLE t MODIFY c new_type; |
| 新增自增主鍵 | ALTER TABLE t ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY; |
| 刪除欄位 | ALTER TABLE t DROP COLUMN c; |
# 表級備份
mysqldump -u root -p dbname tblname > backup.sql
# 導出查詢結果
SELECT col1, col2 FROM tbl LIMIT 10 INTO OUTFILE '/tmp/out.txt';
# 導入資料 (高效)
LOAD DATA INFILE '/tmp/out.txt' INTO TABLE tbl CHARACTER SET utf8mb4;
# 字串拼接插入
INSERT INTO tx SELECT t1.c1, CONCAT(t1.c2, t2.c1) FROM t1, t2;
注意:原文使用已棄用 mysql_* 函數,現代專案請用 mysqli 或 PDO。