mysql 插入更新数据

insert into

insert into 语句进行插入时,如果插入的字段包含 主键或者唯一索引字段,那么,

1)主键或唯一索引 已存在,则插入失败 1062 - Duplicate entry '1' for key 'PRIMARY'

2)只有主键或者唯一索 引不存在时,才能插入成功

存在则抛异常,不存在则插入成功

insert  ignore  into

insert  gnore  into 语句进行插入时, 如果插入的字段包含 主键或者唯一索引字段,那么,

1)主键或唯一索引 已存在,则不插入,返回 Affected rows: 0,不会报错

2)只有主键或者唯一索 引不存在时,会插入成功

存在则忽略,不存在则插入成功

replace into

 replace  into 语句进行插入时, 如果插入的字段包含 主键或者唯一索引字段,那么,

1)主键或唯一索引 已存在,则删除已存在的记录,插入新的记录,Affected rows: 2

2)主键或唯一索引 不存在,则直接插入

存在则删除后插入,不存在则直接插入

insert into  on duplicate key update column1=value1,column2=value2

当前插入方式:

1)如果主键或者唯一索引已存在:

        a:  如果已存在的记录中的 字段 和  后面的 update 字段 值相同,则不更新,影响行数:0

        b: 如果已存在的记录中的 字段 和  后面的 update 字段 值 不 相同,则删除已有记录,重新插入新的记录,新的记录中,使用 update 字段的值,影响行数:2

2)如果主键或者唯一索引不存在,则直接插入行,影响行数:1

存在 并且 不需要更新,则忽略;存在 并且需要更新,则删除记录并根据新值插入;不存在则直接插入

需要根据具体的业务场景来选择,一般都是 先 select,如果存在,则通过 upate 来更新指定字段,很少 利用 replace into 或者 insert into on duplicate key update 来操作,如果是唯一索引字段已存在,那么这两种都是会删除原来的行 再插入新的行,如果表的主键id 是增的话,岂不是 就变了。 

你可能感兴趣的:(笔记,DB,mysql,数据库)