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://blog.csdn.net/kesaihao862/article/details/6718443
|