MySQL INSERT INTO… ON DUPLICATE KEY UPDATE

MySQL 当记录不存在时插入,当记录存在时更新………具体解决办法如下:
1、INSERT INTO… ON DUPLICATE KEY UPDATE

如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE。

使用环境:

例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果:

首先建表(先说UNIQUE):

create table abin1(
id int not null unique,
username varchar(100),
password varchar(100)
)
insert into abin1 (id,username,password) values (1,’abin1′,’varyall1′) on duplicate key update username=’abin12′,password=’varyall12′;
其次再说主键(primary key)类型的:
create table abin2(
id int not null,
username varchar(100),
password varchar(100),
constraint pk_abin2 primary key(id)
)
执行语句:
insert into abin2 (id,username,password) values (1,’abin1′,’varyall1′) on duplicate key update username=’abin12′,password=’varyall12′;

2、插入单行记录:如果不存在插入记录,如果存在记录的话,就不再插入

insert into abin2 (id,username,password) select 1,’abin12′,’varyall12′ from dual
where not exists (select k.* from abin2 k where k.id=1)

3、示例一:插入多条记录

假设有一个主键为 id 的 abin2表,可以使用下面的语句:

insert into abin2 (id,username,password) select 1,’abin12′,’varyall12′ from dual
where not exists (select k.* from abin2 k where k.id=1)
4、
我们在使用数据库时可能会经常遇到这种情况。如果一个表在一个字段上建立了唯一索引,当我们再向这个表中使用已经存在的键值插入一条记录,那将会抛出一个主键冲突的
错误。当然,我们可能想用新记录的值来覆盖原来的记录值。如果使用传统的做法,必须先使用DELETE语句删除原先的记录,然后再使用INSERT插入新的记录。而在MySQL中为
我们提供了一种新的解决方案,这就是REPLACE语句。使用REPLACE插入一条记录时,如果不重复,REPLACE就和INSERT的功能一样,如果有重复记录,REPLACE就使用新记录的值
来替换原来的记录值。

具体用法:
replace into abin2 (id,username,password) values (2,’abin’,’varyall’)

标签