INSERT 基本語法
INSERT INTO table_name (col1, col2, ...)
VALUES (val1, val2, ...);
- 列名與值順序、數量、類型必須一一對應
- 字符串/日期用單引號
'...',數值直接寫
- 省略列名時,需對應表定義的所有列(含身份列需用 DEFAULT 或列清單)
經典單行插入
INSERT INTO employee (first, last, age, address, city)
VALUES ('Luke', 'Duke', 45, '2130 Boars Nest', 'Hazard Co');
中文數據插入範例
INSERT INTO employee (first, last, age, address, city)
VALUES ('Zhang', 'Weiguo', 28, '北京601信箱', '北京');
批量插入高性能寫法
-- 多行 VALUES(SQL Server 2008+)
INSERT INTO employee (first, last, age)
VALUES
('A', 'B', 20),
('C', 'D', 25),
('E', 'F', 30);
-- INSERT ... SELECT(跨表/大量數據)
INSERT INTO target_table (col1, col2)
SELECT col1, col2 FROM source_table WHERE ...;
進階技巧與避坑指南
- 身份列:
IDENTITY(1,1) 列不可顯式插入,除非 SET IDENTITY_INSERT ON
- DEFAULT 約束:
INSERT ... VALUES (DEFAULT, 'val') 使用預設值
- 大批量:
BULK INSERT / bcp / SqlBulkCopy(.NET)比多行 VALUES 快 10-100 倍
- 錯誤處理:
TRY...CATCH 捕獲主鍵衝突、檢查約束違例
- 最小日誌:配合
TABLOCK、簡單恢復模式、無索引/觸發器,可實現最小日誌插入