mysql ignore replace_mysql中sql使用 replace into与duplicate以及insert ignore

在使用mysql数据库时候经常会遇到需要插入数据但是如果存在了就更新的情况。那么针对mysql数据库就可以使用 replace into和insert into on duplicate key update进行操作;

准备

第一次建表 表1

CREATE TABLE `husers` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`name` varchar(255) NOT NULL,

`cad_id` varchar(255) DEFAULT NULL,

`age` int(11) DEFAULT NULL,

`sex` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4

第二次建表 表2

CREATE TABLE `husers` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`name` varchar(255) NOT NULL,

`cad_id` varchar(255) DEFAULT NULL,

`age` int(11) DEFAULT NULL,

`sex` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `uq_index` (`cad_id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4

在使用replace into和insert into on duplicate key update时需要注意  一个表中必须存在 唯一索引或者主键id

语句实例

replace into husers(name,cad_id) value('aqa11','1234567890')

insert into husers(id,name,cad_id,sex) value(2,'aqa11211','1234567890',0) on duplicate key update name='1122asdasdasd',sex=0

工作机制

replace into 在使用的时候 如果主键(或者唯一索引)已经存在那么该条语句将会删除 当前记录并将新的记录插入 ,这种会导致其他字段为空 只有主键字段和插入的属性有数据

insert into on duplicate key update则会存在时候更新不存在时候插入

以上两种操作 其中如果主键Id或唯一索引的列必须出现在 表名()括号里

例如在表2中使用时候

insert into husers(name,cad_id,sex) value('aqa11211','1234567890',0) on duplicate key update name='1122asdasdasd',sex=0

cad_id必须出现 表1中id必须出现

如果都出现在括号中  取或(or ||)的结果 也就是说id和唯一索引都没有时候才会插入 否则更新

在数据量比较小的时候 两种命令效率都可以;当数据量比较大时候(1000W+)时候效率差别就会比较大;

显而易见 第一种方式replace into会低很多 因为删除 插入要维护索引,第二种效率要好更新时候索引不变减少维护成本

如果遇到  存在了一条数据(根据主键或者唯一索引)那么就不再插入 的需求 可以使用insert ignoer into 语句

INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('thce@163.com', '11', '99199');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值