資料表是關聯式資料庫的核心物件。掌握 CREATE TABLE、ALTER TABLE、DROP TABLE 的完整語法與選項,是資料庫開發與管理的基本功。
#table_name — 僅目前會話可見##table_name — 所有會話可見臨時表名稱含 # 號,最大長度 20 字元(含 #)。
CREATE TABLE [database.[schema.]]table_name
(
column_name data_type [IDENTITY(seed, increment)]
[NULL | NOT NULL]
[DEFAULT constant_expression]
[PRIMARY KEY | UNIQUE]
[CHECK (logical_expression)]
[COLLATE collation_name],
...
[table_constraint] ::=
[CONSTRAINT constraint_name]
{PRIMARY KEY | UNIQUE | FOREIGN KEY | CHECK} (column_list)
)
seed 起始值,increment 遞增值,預設皆為 1CREATE TABLE person
(
person_id INT IDENTITY(1, 10) PRIMARY KEY, -- 1, 11, 21, 31...
name CHAR(8) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at DATETIME DEFAULT GETDATE(),
status TINYINT DEFAULT 1 CHECK (status IN (0,1,2))
)
ALTER TABLE [database.[schema.]]table_name
{
ADD column_definition | table_constraint
| DROP CONSTRAINT constraint_name
| ALTER COLUMN column_name new_data_type [NULL | NOT NULL]
| ENABLE | DISABLE TRIGGER | CONSTRAINT
| SWITCH PARTITION ...
}
-- 新增欄位 ALTER TABLE person ADD country CHAR(2) NULL -- 修改欄位型別 (需確保資料相容) ALTER TABLE person ALTER COLUMN name VARCHAR(50) NOT NULL -- 新增約束 ALTER TABLE person ADD CONSTRAINT chk_age CHECK (age >= 0) -- 刪除約束 ALTER TABLE person DROP CONSTRAINT chk_age -- 重新命名 (需 sp_rename) EXEC sp_rename 'person', 'users'
DROP TABLE [database.[schema.]]table_name [, ...n]
-- 檢查相依性
SELECT OBJECT_NAME(parent_object_id) AS referencing_table
FROM sys.foreign_keys
WHERE referenced_object_id = OBJECT_ID('dbo.person')
-- 交易中刪除 (可回滾)
BEGIN TRAN
DROP TABLE person
-- ROLLBACK / COMMIT