首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 記錄不存在則插入、存在則更新的兩種實作模式

     編輯:MySQL 資料庫相關知識

場景一:僅在記錄不存在時插入

批次插入(配合子查詢)

INSERT INTO clients (client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE NOT EXISTS (SELECT * FROM clients WHERE clients.client_id = suppliers.supplier_id);

單筆插入(使用 DUAL 虛表)

INSERT INTO clients (client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE NOT EXISTS (SELECT * FROM clients WHERE clients.client_id = 10345);

DUAL 允許 SELECT 後直接跟值,即使值不在現有表中。

場景二:不存在則插入,存在則更新(UPSERT)

INSERT INTO `200702` (`domain`, `2nd_domain`, `tld`, `query_ns1`, `query_ns2`, `report_date`)
VALUES ('dnspod.com', 'dnspod', 'com', 1000, 2000, '2007-02-04')
ON DUPLICATE KEY UPDATE
    `query_ns1` = `query_ns1` + 1000,
    `query_ns2` = `query_ns2` + 2000;

實測流程

  1. TRUNCATE \`200702\`; 清空表
  2. 首次執行 → Query OK, 1 row affected,資料寫入
  3. 再次執行相同語句 → Query OK, 2 rows affected,query_ns1 累加為 2000,query_ns2 為 4000

關鍵前提

建表時 **必須給 domain 加唯一索引**:

UNIQUE KEY `domain` (`domain`,`report_date`)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved