INSERT [LOW_PRIORITY|DELAYED|HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr|DEFAULT},...),(...),...
[ON DUPLICATE KEY UPDATE col_name=expr, ...]
-- SET 形式(單行)
INSERT [LOW_PRIORITY|DELAYED|HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
SET col_name={expr|DEFAULT}, ...
-- SELECT 形式
INSERT [LOW_PRIORITY|HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ON DUPLICATE KEY UPDATE col_name=expr, ...]
-- 全列插入
INSERT INTO worker VALUES ('tom','tom@yahoo.com');
-- 批量插入
INSERT INTO worker VALUES ('tom','tom@yahoo.com'), ('paul','paul@yahoo.com');
-- 指定列
INSERT INTO worker (name) VALUES ('tom');
INSERT INTO worker (name) VALUES ('tom'), ('paul');
-- SET 形式
INSERT INTO worker SET name='tom';
INSERT INTO tbl (col1,col2) VALUES (15, col1*2); -- 合法
INSERT INTO tbl (col1,col2) VALUES (col2*2, 15); -- 非法,不可後引前
INSERT INTO tbl1 (col1,col2) SELECT col3,col4 FROM tbl2;
INSERT INTO tbl1 SELECT col3,col4 FROM tbl2; -- 全列對應
限制:SELECT 不能含 ORDER BY;目標表不可出現在 FROM 中。
唯一鍵衝突時轉為 UPDATE:
-- 單行
INSERT INTO t (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3;
INSERT INTO t (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=VALUES(c);
-- 批量引用其他列
INSERT INTO t (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
-- 配合 SELECT
INSERT INTO tbl1 (a,b,c) SELECT col1,col2,col3 FROM tbl2
ON DUPLICATE KEY UPDATE c=VALUES(c);
INSERT DELAYED INTO worker (name) VALUES ('tom'), ('paul');