MySQL在进行数据插入操作时,总是会考虑是否插入重复数据。之前的操作都是基于主键或者唯一性约束。只做更新,不做插入。代码重复是低效的。新建表CREATETABLE`person`(`id`intNOTNULLCOMMENT'主键',`name`varchar(64)CHARACTERSETutf8COLLATEutf8_binNULLDEFAULTNULLCOMMENT'name',`age`intNULLDEFAULTNULLCOMMENT'age',`address`varchar(512)CHARACTERSETutf8COLLATEutf8_binNULLDEFAULT'地址id`)USINGBTREE)ENGINE=InnoDBCHARACTERSET=utf8COLLATE=utf8_binROW_FORMAT=Dynamic;添加如下三条数据:我们可以根据插入方式避免:1.insertignoreinsertignore会自动忽略数据库中已经存在的数据(判断根据主键或唯一索引),如果没有数据就插入数据,如果有数据就跳过插入这条数据。插入SQL如下:insertignoreinperson(id,name,age,address)values(3,'who',23,'甘肃省'),(4,'我的天',25,'浙江省');再查看数据库会发现只插入了id为4的数据,而id为3的数据在数据库中存在,所以忽略。2.replaceintoreplaceinto首先尝试向表中插入数据,1.如果发现表中已经存在这行数据(通过主键或唯一索引判断),先删除这行数据,然后插入新数据。2.否则,直接插入新数据。插入SQL如下:replaceinperson(id,name,age,address)values(3,'who',23,'甘肃省'),(4,'我的天',25,'浙江省');首先我们恢复表中的数据,然后进行insert操作,发现id为3的数据发生了变化,增加了id为4的数据。3.insertonduplicatekeyupdateinsertonduplicatekeyupdate如果insertinto语句末尾指定了onduplicatekeyupdate+fieldupdate,后面有重复数据时会按照fieldupdate的说明(通过主键判断)或唯一索引)更新信息。插入SQL如下:insertintperson(id,name,age,address)values(3,'who',23,'甘肃省')onduplicatekeyupdatename='who',age=23,address='甘肃省';首先我们恢复了表中的数据,然后在进行insert操作的时候,发现id为3的数据发生了变化,于是进行了update操作。我们可以根据自己的业务需求来选择方式。
