首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IGNORE,REPLACE,ON DUPLICATE KEY UPDATE在避免重复插入记录时存在的问题及最佳实践

至此,前面描述的“数据表中已存在该条记录”的判断逻辑,在身份证记录表中的标准是指身份证号(identity_id字段的值)相同,因为我们认为用户在进行该操作时不会给某个身份证号指定分配主键(Id)值,所以以下讨论都不考虑主键...这里返回影响了2行记录,原因是replace是先删除了原有的重复记录,再插入一条新记录。...(共享)锁,然后返回该行数据给server层; server在内存对该行执行update操作;  对该行记录加上X(排它)锁; 将update后的结果写入该行。...失败 执行insert...on duplicate key update 3 获取重复记录的S锁,并获取该记录 insert失败 4 update该记录的值 获取重复记录的S锁,并获取该记录 5 申请该记录的...自增id超大问题查询 13、https://www.cnblogs.com/buguge/p/10139872.html mysql执行update语句受影响的行数是0 14、http://www.fordba.com

2.3K23

4.表记录的更新操作

表记录的插⼊ 批量插⼊多条记录 例如: insert…select插⼊结果集 注意:字段列表1与字段列表2的字段个数必须相同,且对应字段的数据类型尽量保持⼀致。...,不同之处在于,使⽤replace语句向表插⼊新记录 时,如果新记录的主键值或者唯⼀性约束的字段值与旧记录相同,则旧记录先被删除(注意:旧记录删 除时也不能违背外键约束条件),然后再插⼊新记录。...MySQL特殊字符序列 update表名 set字段名1=值1,字段名2=值2,…,字段名n=值n [where条件表达式] delete from表名[where条件表达式] truncate...表记录的检索 select语句基本格式 使⽤谓词过滤记录 使⽤谓词distinct过滤结果集中的重复记录。...⼦查询 如果⼀个select语句能够返回单个值或者⼀列值,且该select语句嵌套在另⼀个SQL语句(例如select语 句、insert语句、update语句或者delete语句)中,那么该select

1.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    「mysql优化专题」90%程序员都会忽略的增删改优化(2)

    三、UPDATE语句: UPDATE 表名 SET 字段名=新值[, 字段名=新值] [更新条件] 例子: ? 优化:更新多条记录(往后会结合MyBatics写个实例) ? 更新多条记录的多个值 ?...当修改VARCHAR型字段时,尽量使用相同长度内容的值代替。 (3). 尽量最小化对于含有UPDATE触发器的表的UPDATE操作。 (4). 避免UPDATE将要复制到其他数据库的列。 (5)....使用REPLACE插入记录时,如果记录不重复(或往表里插新记录),REPLACE功能与INSERT一样,如果存在重复记录,REPLACE就使用新记录的值来替换原来的记录值。...在有重复记录时更新,在没有重复记录时插入。...2)UPDATE可以选择性地更新记录的一部分字段。而REPLACE在发现有重复记录时就将这条记录彻底删除,再插入新的记录。也就是说,将所有的字段都更新了。

    92830

    MySQL全部知识点(1)

    数据库存储数据的优先: 可存储大量数据; 方便检索; 保持数据的一致性、完整性; 安全,可共享; 通过组合分析,可产生新数据。...3.2 客户端登录退出mysql 在启动MySQL服务器后,我们需要使用管理员用户登录MySQL服务器,然后来对服务器进行操作。...4.2 修改数据 语法: UPDATE 表名 SET 列名1=值1, … 列名n=值n [WHERE 条件] UPDATE stu SET sname=’zhangSanSan’, age=’32’,...stu WHERE sname LIKE '%a%'; 4 字段控制查询 4.1 去除重复记录 去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如emp表中sal字段就存在相同的记录。...当只查询emp表的sal字段时,那么会出现重复记录,那么想去除重复记录,需要使用DISTINCT: SELECT DISTINCTsalFROMemp; 4.2 查看雇员的月薪与佣金之和 因为sal和comm

    1.3K50

    java数据库的介绍和使用_java实现数据库的查询

    ;--一次性插入多条 数据 --改 update update 表名 set 列名1=列值1,列名2=列值2 ... where 列名=值;--修改操作 update 表名 set 列名1=列值1;--...emp limit 3,10;--查询10行记录,起始行从3开始 --注意:LIMIT只能在MySql和SqlServer中有效 /* 多表查询(跨表查询) */ --联合查询 --说明:合并结果集就是把两个...select语句的查询结果合并到一起,被合并的两个结果:列数、列类型必须相同 --union 去除重复记录 --union all 不去除重复记录 --连接查询 --内连接 --等值连接:建立在父子表关系上...--3.外键的数据类型必须与主表中主键的数据类型完全相同 --4.外键可以是null值 /* 表与表之间的关系 */ --1.一对多: 一张表中的一条记录再另一张表中出现多次 --2.多对多: 要想两张表之间实现多对多的关系...--3.一对一:一张表里的记录,在另外一张表里只能出现一次.表和表之间的关系必须通过外键来创建,但是外键一创建就是一对多,因此在从表里将外键设置唯一性约束,实现一对一 版权声明:本文内容由互联网用户自发贡献

    1.3K30

    一千行 MySQL 详细学习笔记(值得学习与收藏)

    表名 SET 字段名=新值[, 字段名=新值] [更新条件] 字符集编码 -- MySQL、数据库、表、字段均可设置编码 -- 数据编码与客户端编码不需一致 SHOW VARIABLES LIKE '...HAVING 子句,条件子句 与 where 功能、用法相同,执行时机不同。 where 在开始时执行检测数据,对原数据进行过滤。...DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录 UNION 将多个select查询的结果组合成一个结果集合。...Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新...,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update

    2.8K20

    1000行 MySQL 学习笔记,不怕你不会,就怕你不学!

    表名 SET 字段名=新值[, 字段名=新值] [更新条件] 字符集编码 -- MySQL、数据库、表、字段均可设置编码 -- 数据编码与客户端编码不需一致 SHOW VARIABLES LIKE...HAVING 子句,条件子句 与 where 功能、用法相同,执行时机不同。 where 在开始时执行检测数据,对原数据进行过滤。...DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录 UNION 将多个select查询的结果组合成一个结果集合。...Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新...,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update

    1.5K10

    MySQL 详细学习笔记

    表名 SET 字段名=新值[, 字段名=新值] [更新条件] 字符集编码 -- MySQL、数据库、表、字段均可设置编码 -- 数据编码与客户端编码不需一致 SHOW VARIABLES LIKE '...HAVING 子句,条件子句 与 where 功能、用法相同,执行时机不同。 where 在开始时执行检测数据,对原数据进行过滤。...DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录 UNION 将多个select查询的结果组合成一个结果集合。...Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新...,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update

    1.5K50

    一千行 MySQL 详细学习笔记

    表名 SET 字段名=新值[, 字段名=新值] [更新条件] 字符集编码 -- MySQL、数据库、表、字段均可设置编码 -- 数据编码与客户端编码不需一致 SHOW VARIABLES LIKE '...HAVING 子句,条件子句 与 where 功能、用法相同,执行时机不同。 where 在开始时执行检测数据,对原数据进行过滤。...DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录 UNION 将多个select查询的结果组合成一个结果集合。...Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新...,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update

    2.6K30

    1000行 MySQL 学习笔记,不怕你不会,就怕你不学!

    表名 SET 字段名=新值[, 字段名=新值] [更新条件] 字符集编码 -- MySQL、数据库、表、字段均可设置编码 -- 数据编码与客户端编码不需一致 SHOW VARIABLES LIKE...HAVING 子句,条件子句 与 where 功能、用法相同,执行时机不同。 where 在开始时执行检测数据,对原数据进行过滤。...DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录 UNION 将多个select查询的结果组合成一个结果集合。...Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新...,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update

    1.7K40

    牛逼的 MySQL 学习笔记

    表名 SET 字段名=新值[, 字段名=新值] [更新条件] 字符集编码 -- MySQL、数据库、表、字段均可设置编码 -- 数据编码与客户端编码不需一致 SHOW VARIABLES LIKE '...HAVING 子句,条件子句 与 where 功能、用法相同,执行时机不同。 where 在开始时执行检测数据,对原数据进行过滤。...DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录 UNION 将多个select查询的结果组合成一个结果集合。...Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新...,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update

    2.1K31

    【收藏】一千行 MySQL 学习笔记

    表名 SET 字段名=新值[, 字段名=新值] [更新条件] 字符集编码 -- MySQL、数据库、表、字段均可设置编码 -- 数据编码与客户端编码不需一致 SHOW VARIABLES LIKE '...HAVING 子句,条件子句 与 where 功能、用法相同,执行时机不同。 where 在开始时执行检测数据,对原数据进行过滤。...DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录 UNION 将多个select查询的结果组合成一个结果集合。...Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新...,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update

    2K20

    MySQL 学习笔记

    表名 SET 字段名=新值[, 字段名=新值] [更新条件] 字符集编码 -- MySQL、数据库、表、字段均可设置编码 -- 数据编码与客户端编码不需一致 SHOW VARIABLES LIKE '...HAVING 子句,条件子句 与 where 功能、用法相同,执行时机不同。 where 在开始时执行检测数据,对原数据进行过滤。...DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录 UNION 将多个select查询的结果组合成一个结果集合。...Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新...,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update

    1.8K10

    一千行 MySQL 详细学习笔记

    表名 SET 字段名=新值[, 字段名=新值] [更新条件] 字符集编码 -- MySQL、数据库、表、字段均可设置编码 -- 数据编码与客户端编码不需一致 SHOW VARIABLES LIKE '...HAVING 子句,条件子句 与 where 功能、用法相同,执行时机不同。 where 在开始时执行检测数据,对原数据进行过滤。...DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录 UNION 将多个select查询的结果组合成一个结果集合。...Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新...,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update

    2.4K20

    MySQL 常用语句(值得收藏)

    表名 SET 字段名=新值[, 字段名=新值] [更新条件] 字符集编码 -- MySQL、数据库、表、字段均可设置编码 -- 数据编码与客户端编码不需一致 SHOW VARIABLES LIKE '...HAVING 子句,条件子句 与 where 功能、用法相同,执行时机不同。 where 在开始时执行检测数据,对原数据进行过滤。...DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录 UNION 将多个select查询的结果组合成一个结果集合。...Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新...,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update

    1.6K40

    MySQL-单表操作

    INSERT [INTO] 数据表名 [(字段列表)]{VALUES|VALUE}(值列表) ON DUPLICATE KEY UPDATE 字段名 1 = 新值1[,字段名2 = 新值2]…; 主键冲突替代...去除重复记录 实际应用中,对于数据的分析需求,有时需要去除查询记录中重复的数据。...SELETE selete 选项 字段列表 FROM 数据表 在上述语法中,“selete选项”默认值为All,表示保存所有查询到的记录;当设置为DISINCT时,表示去除重复记录,只保留一条。...需要注意的是,当查询记录的字段有多个时,必须所有字段的值完全相同才被认为是重复记录。 排量与限量 排序 单字段排序 单字段排序指的是查询时仅按照一个指定字段进行升序或降序排序。...分组与聚合函数 分组 在MySQL中,可以使用GROUP BY 根据一个或多个字段进行分组,字段值相同的为一组。另外对于分组的数据可以使用HAVING进行条件筛选。

    2K10

    时间戳,这样用就对了

    explicit_defaults_for_timestamp参数决定MySQL服务端对timestamp列中的默认值和NULL值的不同处理方法。...CURRENT_TIMESTAMP 在创建新记录和修改现有记录的时候都对这个数据列刷新 TIMESTAMP DEFAULT CURRENT_TIMESTAMP 在创建新记录的时候把这个字段设置为当前时间...hh:mm:ss’ ON UPDATE CURRENT_TIMESTAMP 在创建新记录的时候把这个字段设置为给定值,以后修改时刷新它 实际情况下,这里建议这样创建表: CREATE TABLE `...关于时间戳,下面总结下几点经验建议,希望对你有所帮助: 数据表具有create_time、update_time时间戳字段,并设置好默认值。...不同环境数据库时区建议保持一致,不要随意更改数据库时区。 不同实例间迁移数据要注意时区是否相同。 程序jdbc连接串建议指定时区并与数据库保持一致。

    1.1K30

    一千行 MySQL 学习笔记

    表名 SET 字段名=新值[, 字段名=新值] [更新条件] 字符集编码 /* 字符集编码 */ -------------------- MySQL、数据库、表、字段均可设置编码-- 数据编码与客户端编码不需一致...HAVING 子句,条件子句 与 where 功能、用法相同,执行时机不同。 where 在开始时执行检测数据,对原数据进行过滤。 having 对筛选出的结果再次进行过滤。...DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录 UNION /* UNION */ ------------------ 将多个select...Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新...,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update3

    84720

    有关于MySQL的面试题

    增加一条记录 和 更新一条记录的 SQL语句#增加记录值 ('12', '研发部', '张三') ; #更新 dept_id='12'的记录 ('12', '研发部', '张三新') ; #2需要给表Department...MySQL是一个开源的关系型数据管理系统,用于存取数据、查询、更新和管理数据。 02、对MySQL数据库去重的关键字是什么?...select distinct 字段名 from 表名数据库自带的distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重复记录的所有值。...优势:唯一索引可以保证数据库表中每一行数据的唯一性索引可以加快数据查询速度,减少查询时间 劣势:创建索引和维护索引要耗费时间索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间给表中的数据进行增...和 更新一条记录的 SQL语句 #增加记录值 ('12', '研发部', '张三') ;  #更新 dept_id='12'的记录 ('12', '研发部', '张三新') ; update Department

    1.1K30
    领券