1. INSERT INTO
insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错;
2. INSERT IGNORE
insert ignore 如果存在数据,那么则忽略新数据。也是mysql三种防止重复插入数据的方式之一
3. REPLACE INTO
replace into 表示插入替换数据,表中如果有PrimaryKey或者unique索引的话,数据库如果已存在数据,则用新数据替换,如果没有数据则和insert into一样。也是mysql三种防止重复插入数据的方式之一
replace语句返回一个数,指的是受影响的数据条数。该数指的是删除和插入一共影响的数据条数,如果返回1,说明没有数据,只进行一次插入操作。如果返回的大于1,说明删除了数据之后,在进行插入的。由于唯一索引的原因,可能执行一次操作会影响多少数据。也就是删除多条,然后插入一条新数据。
下图为演示效果,id为主键(PrimaryKey)
INSERT INTO `level_user` (id,level_id,user_code,create_time,create_code) VALUES(1,1,1,NOW(),'ceshi')
第一次执行:
第二次执行:因为主键已存在,抛出异常
目前数据库的数据结果:
INSERT IGNORE `level_user` (id,level_id,user_code,create_time,create_code) VALUES(1,1,1,NOW(),'ceshi')
在上面结果基础上在执行第二条sql,执行成功了,但是受影响数据条数为0,说明没有更新
此时数据库的数据结果:结果没有任何改变。
REPLACE INTO `level_user` (id,level_id,user_code,create_time,create_code) VALUES(1,3,3,NOW(),'ceshi')
在上面结果基础上在执行第三条sql,执行成功了,受影响条数为2,说明删除了之后然后进行插入的,数据已经变了
此时数据库的数据结果:结果已经发生改变。
第三种mysql防止重复插入数据的方式:ON DUPLICATE KEY UPDATE
根据唯一主键或者唯一索引,如果没有数据则插入,如果存在数据,则可以根据自己的情况更新某些值,sql举例如下:
INSERT INTO `level_user` (id,level_id,user_code,create_time,create_code)
VALUES(1,1,1,NOW(),'ceshi')
ON DUPLICATE KEY UPDATE
create_time=NOW()
网友评论