很多时候在日常项目中,有些数据是不允许重复的,比如用户信息中的登录名。一旦存在相同的登录名,就不可避免地知道是哪个用户进行了登录操作,从而导致系统异常。往往在防止数据重复的情况下,我们使用唯一索引来解决,如下CREATETABLE`login`(`id`bigintunsignedNOTNULLAUTO_INCREMENT,`name`varchar(255)DEFAULTNULL,`password`varchar(255)DEFAULTNULL,PRIMARYKEY(`id`),UNIQUEKEY`idx_name`(`name`)使用BTREE)ENGINE=InnoDBDEFAULTCHARSET=utf8;当我们执行同名数据时,会报如下错误。除了这个方法,你还知道别的吗?下面我们介绍其他几种方法。插入忽略数据时,如果数据存在,则忽略插入。INSERTignoreINTOlogin(`name`,`password`)VALUES("ganhuojun","password")replaceintoinsertingdata当数据存在时,删除并插入REPLACEINTOlogin(`name`,`password`)VALUES("ganhuojun","password")执行后发现有2行生效,删除了1行,增加了1行insertifnotexistssql的语法是insertinto...select...wherenotexist....这条语句先判断mysql数据库中是否存在这条数据。如果不存在,则正常插入。如果存在,则忽略INSERTINTOlogin(`name`,`password`)SELECT'ganhuojun','password'FROMloginWHERENOTEXISTS(SELECT`name`FROMloginWHERE`name`='ganhuojun')onduplicatekeyupdate插入数据时,如果数据存在,执行更新操作INSERTINTOlogin(`name`,`password`)VALUES("ganhuojun","password")关于重复密钥更新密码='passwd'
