在 test 資料表新增 recommend 欄位,型別 CHAR(1),預設值 'n':
ALTER TABLE test
ADD COLUMN recommend CHAR(1) DEFAULT 'n';
| 資料庫 | 語法 | 備註 |
|---|---|---|
| MySQL | ALTER TABLE test ADD recommend CHAR(1) DEFAULT 'n'; | COLUMN 關鍵字可省略 |
| PostgreSQL | ALTER TABLE test ADD COLUMN recommend CHAR(1) DEFAULT 'n'; | 標準 SQL 寫法 |
| SQL Server | ALTER TABLE test ADD recommend CHAR(1) DEFAULT 'n'; | 不支援 COLUMN 關鍵字 |
| Oracle | ALTER TABLE test ADD (recommend CHAR(1) DEFAULT 'n'); | 需用括號包裹 |
| SQLite | ALTER TABLE test ADD COLUMN recommend CHAR(1) DEFAULT 'n'; | 支援標準語法 |
-- 刪除欄位
ALTER TABLE test DROP COLUMN recommend; -- MySQL/PostgreSQL/SQLite
ALTER TABLE test DROP COLUMN recommend; -- SQL Server (同語法)
ALTER TABLE test DROP (recommend); -- Oracle
-- 修改欄位型別/長度
ALTER TABLE test MODIFY recommend VARCHAR(10); -- MySQL/Oracle
ALTER TABLE test ALTER COLUMN recommend VARCHAR(10); -- SQL Server/PostgreSQL
-- 重新命名欄位
ALTER TABLE test CHANGE recommend is_recommend CHAR(1); -- MySQL
ALTER TABLE test RENAME COLUMN recommend TO is_recommend; -- PostgreSQL/SQLite
EXEC sp_rename 'test.recommend', 'is_recommend', 'COLUMN'; -- SQL Server
ALTER TABLE test RENAME COLUMN recommend TO is_recommend; -- Oracle 12c+
-- 新增/刪除主鍵
ALTER TABLE test ADD PRIMARY KEY (id); -- 標準
ALTER TABLE test DROP PRIMARY KEY; -- MySQL
ALTER TABLE test DROP CONSTRAINT pk_test; -- SQL Server/PostgreSQL/Oracle
-- 新增/刪除索引
CREATE INDEX idx_test_name ON test(name); -- 標準建立
DROP INDEX idx_test_name ON test; -- MySQL
DROP INDEX test.idx_test_name; -- SQL Server
DROP INDEX idx_test_name; -- PostgreSQL/Oracle
ADD COLUMN 可能鎖表較久。MySQL 5.6+ / PostgreSQL 11+ 支援 ALGORITHM=INPLACE 或 CONCURRENTLY 線上操作。NOT NULL 欄位時,若表有既存資料,必須指定 DEFAULT 或先允許 NULL、回填資料、再改 NOT NULL。ALTER TABLE ... ADD COLUMN ... DEFAULT ... 是最基礎的結構變更操作。掌握各主流資料庫的語法差異、大表線上變更策略、與版本控管流程,是 DBA 與後端工程師的必備技能。