萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL 當記錄不存在時插入 記錄存在時自動更新

MySQL 當記錄不存在時插入 記錄存在時自動更新

MySQL 當記錄不存在時插入 記錄存在時自動更新的方法有很多,下面文章總結了兩種技巧,一種是mysql自帶的INSERT ... ON DUPLICATE KEY UPDATE另一種方法是not exists了,下面一起來看一下吧。

重要的就是上面提到的 :

INSERT ... SELECT

INSERT ... ON DUPLICATE KEY UPDATE

INSERT ... ON DUPLICATE REPLACE

 
比如想往表中插入一條數據,如果表中沒有該條數據才插入,如果已經存在該條數據就不插入。

首先,在創建表時,將不需要重復的字段設置為unique,然後在插入時,使用insert ignore語句

MySQL實現(Duplicate key)如果不存在則插入,存在則更新:

INSERT INTO ipstats VALUES(’192.168.0.1′, 1) ON DUPLICATE KEY UPDATE clicks=clicks+1;

例子

 代碼如下 復制代碼

mysql> 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;
Query OK, 2 rows affected (0.01 sec)

例子2

ysql> 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;
Query OK, 1 row affected (0.00 sec)


除了使用INSERT ... ON DUPLICATE KEY UPDATE我們還可以使用(insert if not exists)

示例一:插入多條記錄

假設有一個主鍵為 client_id 的 clients 表,可以使用下面的語句:

 代碼如下 復制代碼


INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, supplier_type
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);


示例二:插入單條記錄

 代碼如下 復制代碼

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 語句後面直接跟上要插入字段的值,即使這些值還不存在當前表中。

測試性能發現如果同樣多的數據使用INSERT ... ON DUPLICATE KEY UPDATE比起not exists是要好很多了,畢竟前者是mysql自帶的一個處理重復數據的語句。

copyright © 萬盛學電腦網 all rights reserved