mysql中insert into和replace into以及insert ignore用法区别

replace into 和insert ignore是基于唯一索引或主键基础上使用的

首先创建一张charu表,

-- ----------------------------
-- Table structure for `charu`
-- ----------------------------
DROP TABLE IF EXISTS `charu`;
CREATE TABLE `charu` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`name`  varchar(50) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL DEFAULT '' ,
`addr`  varchar(250) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT '' ,
`number`  varchar(150) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL DEFAULT '' ,
`pubdate`  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
PRIMARY KEY (`id`),
UNIQUE INDEX `examp` USING BTREE (`name`, `number`) 
)
ENGINE=MyISAM
DEFAULT CHARACTER SET=gbk COLLATE=gbk_chinese_ci
AUTO_INCREMENT=8

;

1. 首先创建一张charu表,并创建联合唯一索引(name+number),pubdate为当前时间戳

2. 插入一条数据

insert into charu(name,addr,number) VALUES('a','b','123456');
执行结果如下:

这时如果再执行上面insert 语句,就会报错,提示name+number重复

3. 使用replace into

3.1

replace into charu(name,addr,number) values('a','b','123456');

执行结果:


分析: 时间和ID更新了,可以看出执行了删除和插入操作

3.2

replace into charu(name,addr,number) values('ab','b','123456'); 

执行结果:


分析:插入了一条新数据,同insert into

3.3

replace into charu(name,addr,number) values('a','bc','123456'); 

执行结果


分析:id为9的更新成ID为11的数据,同时成功的将addr更新为bc,从pubdate上看,是删除原来的并重新插入了

4. 使用insert ignore into


4.1

INSERT IGNORE INTO charu(name,addr,number) values('a','b','123456');

执行结果:


分析:记录无变化,不会提示错误

4.2

INSERT IGNORE INTO charu(name,addr,number) values('ab','b','123456');

执行结果


分析:插入新数据

4.3 

INSERT IGNORE INTO charu(name,addr,number) values('a','bc','123456');

执行结果


分析:记录无变化


结论:

replace into执行过程总是删除后插入新记录

replace into主键相同,主键之外字段会得到更新,而insert ignore into 不会

两者只要主键不通功能同insert into

replace into和insert ignore into 与insert into区别在于insert into插入与主键相同记录会报错而前者不会





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值