| 指令 | 用途 | 是否可回滾 |
|---|---|---|
| CREATE | 建立資料庫物件(Table、View、Index、Procedure...) | 視資料庫而定(多數隱含提交) |
| ALTER | 修改物件結構 | 通常隱含提交 |
| DROP | 刪除物件 | 通常隱含提交 |
| TRUNCATE | 清空資料表(保留結構) | 通常隱含提交 |
CREATE TABLE employees (
emp_id INT NOT NULL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
dept_id INT NOT NULL,
hire_date DATE DEFAULT CURRENT_DATE,
salary DECIMAL(10,2) CHECK (salary >= 0),
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
關鍵字說明:
NOT NULL:禁止空值。PRIMARY KEY:主鍵,隱含 NOT NULL + UNIQUE。UNIQUE:唯一性約束。DEFAULT:預設值。CHECK:資料驗證規則。FOREIGN KEY ... REFERENCES:參考完整性。-- 新增欄位
ALTER TABLE employees ADD COLUMN phone VARCHAR(20);
-- 修改欄位型別/屬性
ALTER TABLE employees ALTER COLUMN salary TYPE NUMERIC(12,2);
ALTER TABLE employees ALTER COLUMN name SET NOT NULL;
-- 新增/刪除主鍵
ALTER TABLE employees ADD PRIMARY KEY (emp_id);
ALTER TABLE employees DROP PRIMARY KEY;
-- 新增/刪除外鍵
ALTER TABLE employees ADD CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(dept_id);
ALTER TABLE employees DROP CONSTRAINT fk_dept;
-- 重命名表/欄
ALTER TABLE employees RENAME TO staff;
ALTER TABLE employees RENAME COLUMN phone TO mobile;
-- 建立一般索引
CREATE INDEX idx_emp_name ON employees(name);
-- 唯一索引
CREATE UNIQUE INDEX idx_emp_email ON employees(email);
-- 複合索引
CREATE INDEX idx_dept_hire ON employees(dept_id, hire_date);
-- 刪除索引
DROP INDEX idx_emp_name ON employees; -- MySQL
DROP INDEX employees.idx_emp_name; -- SQL Server/PostgreSQL
原則:常用於 WHERE、JOIN、ORDER BY 的欄位建索引;避免過度索引拖慢寫入。
DROP TABLE employees; -- 連結構帶資料一起刪
DROP VIEW v_emp_summary;
DROP INDEX idx_emp_name ON employees;
| 類別 | 常用型別 | 備註 |
|---|---|---|
| 數值 | INT, BIGINT, DECIMAL(p,s), FLOAT, REAL | DECIMAL 精確儲存金額 |
| 字串 | VARCHAR(n), CHAR(n), TEXT, CLOB | VARCHAR 變長、CHAR 定長 |
| 日期時間 | DATE, TIME, DATETIME, TIMESTAMP | TIMESTAMP 含時區資訊 |
| 二進位 | BLOB, BYTEA, VARBINARY | 圖片、檔案 |
| 布林 | BOOLEAN, BIT | |
| 其他 | UUID, JSON, XML, GEOMETRY | 視資料庫支援度 |
snake_case(users, order_items)。snake_case。id 或 table_id。ref_table_id。idx_<table>_<col>、uk_<table>_<col>。fk_<table>_<ref_table>、ck_<table>_<rule>。良好的 DDL 規範是資料庫長期可維護的基石。