【Mysql】实现merge into 2

前面写过一篇相关的用replace into实现的文章,
http://blog.csdn.net/asktommorow/article/details/53857136)但replace into有个缺点,会覆盖相应的数据,今天看到了一个新方法,测了一下。

-----------------------INSERT INTO ON DUPLICATE KEY UPDATE
drop table testa;
create table testa(id int primary key AUTO_INCREMENT,name varchar(10),note varchar(10),
`UPDATE_TIME` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY `BPK_AK_KEY_2` (`name`,`note`)
  );
insert into testa(name,note) values('XB','1111111'),('XH','2222222');

select * from testa;

INSERT INTO testa (id,name) 
VALUES (2, 'XHua')
ON DUPLICATE KEY UPDATE
name='XHua'

INSERT INTO testa (id,name) 
VALUES (3, 'XHua')
ON DUPLICATE KEY UPDATE
name='XHua'

-- 不涉及主键插入(相当于直接插入数据)
INSERT INTO testa (name) 
VALUES ('XHua')
ON DUPLICATE KEY UPDATE
name='XHua'

-- 表增加唯一约束插入测试
INSERT INTO testa (id,name) 
VALUES (2, 'XHua')
ON DUPLICATE KEY UPDATE
name='XHuaaa' -- update
-- 唯一约束重复插入
INSERT INTO testa (name,note) 
VALUES ('XB', '1111111')
ON DUPLICATE KEY UPDATE
name='XHua'  -- update

-- ON DUPLICATE KEY UPDATE 按照主键重复判断更新还是插入,
-- 更新数据不会丢失数据(不同于replace into)。但更新时信息提示受影响的行: 2,
-- 仍有可能先删除,后插入,不过插入时会对数据进行处理,避免原来存在的数据被覆盖掉。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值