插入SQL语句的使用

Database 专栏收录该内容
15 篇文章 0 订阅


一. 概述

  1. 总结
SQL语句含义数据库中已存在数据库中不存在结果举例
insert into插入新数据报错插入主键自增insert into names(name, age) values(“小明”, 23);
insert ignore into忽略老数据忽略插入主键自增insert ignore into names(name, age) values(“小明”, 24);
replace into替换老数据替换插入主键自增replace into names(name, age) values(“小明”, 25);
  1. 插入语句总结
SQL语句场景执行结果影响行数主键是否自增示例
insert into唯一索引重复ERROR-主键自增insert into names(name,age) values(‘dadadda’,12);
insert into主键重复ERROR-主键不自增insert into names(id,name,age) values(15,‘hihdadasdadih’,12);
insert ignore into唯一索引重复WARNING0行受影响主键自增insert ignore into names(name,age) values(‘dadadda’,12);
insert ignore into主键重复WARNING0行受影响主键不自增insert ignore into names(id,name,age) values(14,‘dajsldjal’,12);
replace into唯一索引重复执行成功2行受影响删除旧记录,新记录replace into names(name, age) values(“xiaoxue”, 24);
replace into主键重复执行成功2行受影响直接替换该行记录,id不会改变replace into names(id,name, age) values(22,“dasdasdsa”, 28);
replace into主键和唯一索引都不重复执行成功1行受影响与新增记录一样replace into names(name, age) values(“好嗲速递哦啊睡觉的”, 29);
  1. 更新语句总结
SQL语句场景执行结果影响行数主键是否自增示例
update旧数据和要更新的值完全一样执行成功0行受影响-update names set name=‘dasd’ where id=12;
update没有找到该条数据执行成功0行受影响-update names set name=‘dasd’ where id=313421;
update修改的唯一索引字段已有值ERROR--update names set name=‘qaa’ where id=4;
  1. 删除语句总结
SQL语句场景执行结果影响行数主键是否自增示例
delete正常情况执行成功1行受影响-delete from names where name=‘333’;
delete没有该条记录执行成功0行受影响-delete from names where name=‘3333131’;
  1. 创建测试表并插入初始数据
CREATE TABLE names(
    id INT(10) PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) UNIQUE,
    age INT(10)
);

select * from names;
insert into names(name, age) values("xixi", 24);
insert into names(name, age) values("houhou", 25);
insert into names(name, age) values("maomi", 26);
insert into names(name, age) values("liuxing", 27);
  • 查询结果
    在这里插入图片描述

二. 详解

1. insert into

  1. 概述
    • 表示插入新数据。
    • 如果出现重复唯一索引值,id会自增,但插入不成功,会报错。
    • 如果出现重复主键,id不会自增,则插入不成功,报错。
  2. 示例
# 已存在:id自增,插入不成功,报错
insert into names(name, age) values("xixi", 24); # id+1
  • 结果:Error Code: 1062. Duplicate entry 'xixi' for key 'name'

2. insert ignore into

  1. 概述
    • 表示忽略老数据。
    • 如果新数据与数据库已有数据的唯一索引重复,则忽略当前新数据;否则,效果和insert into一样。
    • 如果新数据与数据库已有数据的主键重复,则忽略当前新数据。
    • 要求表中必须有主键或唯一索引;否则,则会插入新数据。
  2. 示例
# 已存在:忽略新记录,id自增,不会报错
insert ignore into names(name, age) values("xixi", 24); # id+1

# 不存在:添加新记录
insert into names(name, age) values("xiaoxue", 24);
  • 结果
    在这里插入图片描述

3. replace into

  1. 概述
    • 表示替换老数据。REPLACE = DELETE和INSERT,即删除旧记录,新增新记录
    • 如果新数据与数据库已有数据的主键或唯一索引重复,则用新数据替换;否则,效果和insert into一样。
    • 要求表中必须有主键或唯一索引;否则,则会插入新数据。
    • 执行REPLACE后,系统返回了所影响的行数:
      • 如果返回值等于1,说明表中没有重复记录;
      • 如果返回值等于2,说明有一条重复记录;
      • 如果返回值大于2,说明有多个唯一索引,有多条记录被删除和插入。
  2. 示例
# 已存在:删除老记录,添加新记录
replace into names(name, age) values("xiaoxue", 24);

# 不存在:添加新记录
replace into names(name, age) values("xiaoyu", 29);
  • 结果
    在这里插入图片描述
  1. ⚠️多个唯一索引的情况
  • 表结构
    在这里插入图片描述

  • 初始查询

select * from test.tx;

在这里插入图片描述

  • 执行插入
replace into test.tx(c1,c2) values(13,25);
  • 结果:删除了id=37和id=38的两条记录,插入id=41的一条记录。可以看出,有多个唯一索引的情况,可能会用一条记录替换多条记录。
    在这里插入图片描述

参考资料

  • 5
    点赞
  • 0
    评论
  • 13
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页

打赏作者

zijikanwa

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值