首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL INSERT 語法詳解:單行、批量、SET、SELECT、ON DUPLICATE KEY、DELAYED

     編輯:MySQL 綜合教學

MySQL INSERT 語法詳解:單行、批量、SET、SELECT、ON DUPLICATE KEY、DELAYED

完整語法

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 ... SELECT

INSERT INTO tbl1 (col1,col2) SELECT col3,col4 FROM tbl2;
INSERT INTO tbl1 SELECT col3,col4 FROM tbl2;  -- 全列對應

限制:SELECT 不能含 ORDER BY;目標表不可出現在 FROM 中。

ON DUPLICATE KEY UPDATE(核心)

唯一鍵衝突時轉為 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(MyISAM/MEMORY/ARCHIVE)

  • 客戶端立即返回,行入隊列,表空閒時寫入。
  • 合併多客戶端寫入為塊,提升吞吐。
  • 限制:不支援 SELECT/ON DUPLICATE KEY;無法獲取 LAST_INSERT_ID();從庫忽略 DELAYED。
INSERT DELAYED INTO worker (name) VALUES ('tom'), ('paul');
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved