下面我们主要说一下在插入时候的几种情况:
1:insert ignore
2:replace into
3:ON DUPLICATE KEY UPDATE
关于insert ignore:
关于replace into:
关于ON DUPLICATE KEY UPDATE :
MySQL 对 SQL 有很多扩展,有些用起来很方便,但有一些被误用之后会有性能问题,还会有一些意料之外的副作用,比如 REPLACE INTO。
比如有这样一张表:
CREATE TABLE`auto` (
`id`int(10) unsigned NOT NULLAUTO_INCREMENT,
`k`int(10) unsigned NOT NULL,
`v`varchar(100) DEFAULT NULL,
`extra`varchar(200) DEFAULT NULL,PRIMARY KEY(`id`),UNIQUE KEY`uk_k` (`k`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
auto 表有一个自增的 id 字段作为主键,字段 k 有 UNIQUE KEY 做唯一性约束。写入几条记录之后会是这样:
xupeng@diggle7:3600(dba_m) [dba] mysql> INSERT INTO auto (k, v, extra) VALUES (1, '1', 'extra 1'), (2, '2', 'extra 2'), (3, '3', 'extra 3');
Query OK,3 rows affected (0.01sec)
Records:3 Duplicates: 0 Warnings: 0xupeng@diggle7:3600(dba_m) [dba] mysql> SHOW CREATE TABLEauto\G*************************** 1. row ***************************
Table: autoCreate Table: CREATE TABLE`auto` (
`id`int(10) unsigned NOT NULLAUTO_INCREMENT,
`k`in