insert, replace, insert ignore用法区别
mysql中经常用到的三种插入数据的语句如下:
- insert into 表示插入数据,数据库会检查主键或者唯一索引,若出现重复则会报错,错误信息如下:
Duplicate entry 'xxx(出现重复的数据)’ for key ‘xxx(主键或唯一索引)’
为了演示,我们将创建一个名为学生(students)的新表。
CREATE TABLE IF NOT EXISTS students (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(50) NOT NULL UNIQUE
);
UNIQUE约束确保电子邮件列中不存在重复的电子邮件。
以下语句在students表中插入一个新行:
INSERT INTO students(email)
VALUES('zhangsan@163.com');
上面语句它按预期那样工作。接下来,我们来执行另一个语句,将两行插入到我们的学生表中:
INSERT INTO subscribers(email)
VALUES('shangsan@163.com'),
('lisi@163.com');
它将返回一个错误:
1062 - Duplicate entry 'zhangsan@163.com' for key 'email'
如错误消息中所示,电子邮件zhangsan@163.com值重复而导致违反UNIQUE约束。
但是,如果您使用INSERT IGNORE语句,则其它语句将会继续执行
MySQL服务器返回一条消息,显示插入一行,另一行被忽略。
Query OK, 1 row affected
Records: 2 Duplicates: 1 Warnings:
- replace into表示插入替换数据,若表中有主键或者唯一索引,且数据库已经存在重复数据,则使用新数据来替换老数据
- insert ignore表示若表中已经存在相同的记录,则忽略当前新数据