首页 > 数据库开发 > MySQL INSERT INTO… ON DUPLICATE KEY UPDATE

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')

本文固定链接: http://www.devba.com/index.php/archives/612.html | 开发吧

报歉!评论已关闭.