【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,
-- 仍有可能先删除,后插入,不过插入时会对数据进行处理,避免原来存在的数据被覆盖掉。

你可能感兴趣的:(Mysql,Needs,About,Databases)