创建测试表

1、正常插入数据

返回:Affected rows: 2, Time: 0.019000s
查看插入: SELECT * FROM user_info;
结果如下:

user_idsexageuser_name
1116zhangsan
2218xiaohong

重复运行上述sql 得到错误提示:1062 – Duplicate entry ‘1’ for key ‘PRIMARY’, Time: 0.008000s 说明此语法重复数据不能插入

2、查询插入,将用户表1 的数据插入到用户表二

执行sql返回:Affected rows: 2, Time: 0.016000s
查看数据:SELECT * FROM user_info_2;
结果与user_info表数据一致
重执行查询插入sql返回:1062 – Duplicate entry ‘1’ for key ‘PRIMARY’, Time: 0.015000s
说明此语法重复数据不能插入

注意:正常插入和查询插入如果两表字段完全一致,并且所有字段都插入可不写字段名,单独插入部分字段或者字段不一致需指定字段名以上可简写为:

查询出来的数据可以别名,可以使用where条件过滤,insert into values 或 insert into select批量插入时,都满足事务的原子性与一致性,一条出错整体都会回滚。在使用insert into select时,MySQL会对select的数据加S(读)锁,在事务较为复杂的场景下可能有死锁的风险。

3、忽略冲突暴力插入

提示:1062 – Duplicate entry ‘1’ for key ‘PRIMARY’, Time: 0.022000s
我们改写成以下写法:

返回:Affected rows: 1, Time: 0.019000s
查看插入: SELECT * FROM user_info;
结果如下:

user_idsexageuser_name
1116zhangsan
2218xiaohong
3119lisi

从数据看插入成功了,虽然user_id 1,2 存在冲突,但是冲突被忽略了,3仍旧插了进来,结果返回受影响的行数,由于 INSERT IGNORE INTO 会忽略数据冲突和约束,生产环境很少使用!

4、数据存在更新,不存在插入

返回:Affected rows: 2, Time: 0.026000s
查看插入: SELECT * FROM user_info;
结果如下:

user_idsexageuser_name
1116zhangsan
2218xiaohong
3119lisi
4120王五

注意这里我们只插入了一行数据,但返回结果却是两行受影响,其实REPLACE INTO 插入数据时 当记录中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据替换(先delete再insert),如果没有数据效果则和INSERT INTO一样。

返回:Affected rows: 2, Time: 0.026000s
查看插入: SELECT * FROM user_info;
结果如下:

user_idsexageuser_name
1116zhangsan
2218xiaohong
3119lisi
4121王五二
5224赵六

注意:ON DUPLICATE KEY UPDATE 当记录中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据更新(update)更新的字段需在UPDATE 后指定,如上述sql 代表user_id相同,则更新年龄和名称,对比表格可以发现第四条数据的该改变,如果没有数据效果则和NSERT INTO一样。

最后修改日期:2020-07-16

作者

留言

Sweet website, super design and style, really clean and employ genial. Esther Eddie Wardieu

Very good post. I am dealing with a few of these issues as well.. Leandra Udall Donna

Juga memiliki velocity yang sangat pas bagi para member. Anastassia Felic Chessy

If some one desires expert view on the topic of running a blog afterward i recommend him/her to pay a visit this webpage, Keep up the nice work. Adelheid Timoteo Oniskey

I love the efforts you have put in this, regards for all the great blog posts. Lanette Pancho Elwin

Well yes and no. It depends on without leaking away your previous data. Elmira Karel Clarkson

Asking questions are in fact pleasant thing if you are not understanding something fully, however this paragraph provides nice understanding even. Kathy Chicky Willetta

Your way of telling the whole thing in this post is genuinely good, every one be capable of without difficulty understand it, Thanks a lot. Angelia Rolph Whittaker

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。