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

mysql技巧:如果记录存在则更新如果不存在则插入的三种处理方法

要求: 新增一个员工时,如果该员工已存在(以员工号f_emp_code作为判断依据),则更新,否则插入。而且工资f_salary,更新时,不得低于原工资(即:工资只能涨,不能降)。...(根据表上的唯一键),如果存在,先delete,然后再insert。...这个方法有一个很大的问题,如果记录存在,每次执行完,主键自增id就变了(相当于重新insert了一条),对于有复杂关联的业务场景,如果主表的id变了,其它子表没做好同步,会死得很难看。...该方法,没有replace into的副作用,不会导致已存在记录的自增id变化。...但是有另外一个问题,如果这个表上有不止一个唯一约束,在特定版本的mysql中容易产生dead lock(死锁),见网友文章https://blog.csdn.net/pml18710973036/article

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

    mysql已存在的表增加自增字段

    需求: 已有的mysql数据表,希望增加一个自增的字段,并设置新数据的初始值。 实际上不复杂,只是做个备忘。...*/ /*执行这一条,它会自动为已存在的数据的自增字段赋初值,从1开始,同时将后续新增的数据从100开始*/ alter table t_abc auto_increment=100; 修改已有数据初始值.../*如果希望所有的数据都从10001 开始,我们可以这么做*/ alter table t_abc add column id int auto_increment primary key; /*...这里没有指定任何数值,执行完后只为自增字段赋从1开始的初始值,其实隐含的设置当前表自增字段从1开始*/ alter table t_abc auto_increment; /*将所有数据增加10000...select max(id) into @maxId from t_abc; /*表中有3条数据,那么maxId 现在是10003*/ select @maxId+1 from dual; /* 10004

    11.2K10

    表数据量影响MySQL索引选择

    现象 新建了一张员工表,插入了少量数据,索引中所有的字段均在where条件出现时,正确走到了idx_nap索引,但是where出现部分自左开始的索引时,却进行全表扫描,与MySQL官方所说的最左匹配原则...{                   "considered_access_paths": [                     {                     //可以看到这边MySQL...false                     }                   ]                 },                 //使用索引查询的成本更低,因此选择了走索引...      "join_execution": {         "select#": 1,         "steps": [         ]       }     }   ] } 结论 MySQL...表数据量的大小,会影响索引的选择,具体的情况还是通过Explain和Optimizer Trace来查看与分析。

    1.5K20

    MySQL建表数据类型的选择

    首先数据选择有几个简单原则: 更小的通常更好。一般情况下,应该尽量使用可以正确存储数据的最小数据类型。例如只需要存 0~200,tinyint unsigned 更好。...通常情况下最好指定列为 NOT NULL,除非真的需要存储 NULL 值。如果查询中包含可为 NULL 的列,对 MySQL 来说更难优化,因为可为 NULL 的列使得索引、索引统计和值比较都更复杂。...MySQL 可以为整数类型指定宽度,例如 int(11),对大多数应用这是没有意义的:它不会限制值的合法范围,只是规定了 MySQL 的一些交互工具(例如 MySQL 命令行客户端)用来显示字符的个数。...MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M 表示该值的总共长度,D 表示小数点后面的长度。...枚举(enum)类型 MySQL 在内部会将每个值在列表中的位置保存为整数,并且在表的 .frm 文件中保存 “数字-字符串” 映射关系的 “查找表”。

    5.2K10

    MySQL表分区的选择与实践小结

    共享结构为innodb默认的结构,除了frm保存innodb表结构外,整个数据库所有表的索引和数据源都保存在ibdata中。...独立空间结构就是每个对应的表保存对应的数据源和索引在一个后缀为ibd的文件中,表结构同样也保存在frm中。...RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。2. LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。3....HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。4....从上面两张截图可以看出使用了分区的查询速度要比未使用分区快差不多1倍,但是如果不使用id为查询条件或没有使用到,速度二者是一样的,甚至有时分区过的还要慢于未分区的,所以在使用上还需结合当前业务做合理的选择

    12910

    如何使用python连接MySQL表的列值?

    MySQL 是一个开源关系数据库管理系统,广泛用于存储、管理和组织数据。使用 MySQL 表时,通常需要将多个列值组合成一个字符串以进行报告和分析。...Python是一种高级编程语言,提供了多个库,可以连接到MySQL数据库和执行SQL查询。 在本文中,我们将深入探讨使用 Python 和 PyMySQL 库连接 MySQL 表的列值的过程。...如果没有错误,则 PyMySQL 已正确安装并可以使用。 步骤 2:连接到 MySQL 数据库 建立与MySQL数据库的连接是任何数据操作任务必不可少的基本步骤。...这将打印 employee 表中每一行的first_name列和last_name列的串联值。...结论 总之,我们已经学会了如何使用Python连接MySQL表的列值,这对于任何使用关系数据库的人来说都是一项宝贵的技能。

    24530

    MySQL数据表索引选择与优化方法

    本文将详细介绍MySQL数据表索引的类型、创建方法、区别、如何选择合适的索引、索引的使用方法、分析策略、优化技巧及维护要点。...在MySQL中,用户不能直接创建哈希索引,当InnoDB检测到某些索引值被频繁访问时,系统会自动为这些索引值建立哈希索引,以提高等值查询的性能。...连接列:在多表连接查询中,用于连接的列如果被索引,可以加快连接速度,因为数据库可以快速找到匹配的行。索引的基数索引的基数是指索引中不同值的数量。...优化索引列的选择:如果 possible_keys 列显示了多个可能的索引,但 key 列只选择了其中的一个,可能需要重新考虑索引列的选择。...避免全表扫描:如果 type 列显示为 ALL,表示进行了全表扫描,这通常意味着查询效率低下,需要考虑是否可以通过添加索引来避免全表扫描。

    22421

    卧槽,安装完MySQL竟然提示数据表不存在!!

    只好安装我电脑上存在的MySQL 5.6来研究Seata源码了。安装完MySQL 5.6竟然提示我数据表不存在!! 今天,就给小伙伴们分享下我是如何解决这个问题的。...InnoDB,但是能确定的,这几张表确实是在mysql5.6中新入的。...' doesn't exist 执行完后,可以用show tables查看一下,看表的数据是否已经比删除之前减少了,如果减少了,说明你成功了!...mysql库,重建上面被删除的表结构:数据库的建设表脚本在mysql软件的安装目录的share目录下,我的mysql软件的安装路径为/usr/test/mysql binghe@localhost :...(none) 02:23:03> use mysql Database changed 如下是执行建表脚本前表的数量: binghe@localhost : mysql 02:23:48> source

    1.8K50

    【已解决】如果将MySQL数据库中的表生成PDM

    数据库中的表生成对应的PDM文件,这里凯哥就讲讲第一种将MySQL数据库的表生成对应的PDM文件。...如果您使用的是其他的工具,请自行查询。 操作步骤: ①:打开MySQL客户端,连接到需要生成PDM的数据库,并将表导出成sql文件的。注意:这里只导出结构,不需要导出数据的。...导入文件:kaigebbs.sql ②:打开PowerDesigner.选择 File—>Reverse Engineer—>Database.如下图: ③:重新命名你导出的表结构(这里主要是为了方便找到...如果需要重新命名,修改好名字后,点击确定。 ④:选择在第二步骤中我们导出的sql文件 ⑤:点击确当,就可以生成对应的PDM文件了。生成后的如下图: 说明: 自动生成的,不会添加表之间的关系。...如果需要添加表结构之间的关系,需要自己在PowerDesigner中手动的去添加关联关系的。 文章中涉及到的软件如下图:

    45600

    mysql常用功能之删除一张表中重复数据&ab表中a存在b不存在的 数据

    在开发中,我们有可能会遇到这种情况: 1:删除一张表中重复数据 2:AB两张表通过主键关联,删除A表中存在而B表中不存在的数据。如下图: ? 这样的怎么解决? 今天遇到一个问题。...这时再看看数据表,数据已经变成了: ? 成功将重复的数据删除。 如果重复数据是三条或者更多怎么办呢?很简单,再多执行几次这个SQL 就好了。 最后,别忘了给字段加个唯一索引,避免数据再出问题 ?...问题2: 有表A 和表B....A是索引表,B是详细表(数据结构如下) A表 id title 1 标题 2 标题 B表 id listid info 1 1 内容1 2 1 内容2 3 1 内容3 4 2 内容1 5 2 内容2 6...2 内容3 7 3 内容1 8 3 内容2 9 3 内容3 现在A表已删除了某条记录 如何能将B表也删除A表没有的记录.

    4.1K40

    如何在MySQL中查看当前会话中存在哪些临时表?

    MySQL是一种常用的关系型数据库管理系统,广泛应用于各种规模的应用程序中。在MySQL中,临时表是一种特殊类型的表,它们仅在当前会话中存在,并在会话结束后自动删除。...分解复杂逻辑:对于复杂的业务逻辑,可以使用临时表来分解问题,简化查询过程。 在MySQL中,可以使用CREATE TEMPORARY TABLE语句来创建临时表。...为了只查看当前会话中存在的临时表,可以使用以下方法之一: 方法一:使用INFORMATION_SCHEMA MySQL提供了一个特殊的系统数据库INFORMATION_SCHEMA,它包含了关于数据库、...方法二:使用COMMIT语句 在MySQL中,当一个会话结束时,所有的临时表都将被自动删除。因此,可以通过执行COMMIT语句来结束当前会话,并查看当前会话中存在的临时表。...3、查找以“#sql”开头的表名,这些表是临时表。 临时表在MySQL中是一种非常有用的功能,它们可以帮助我们在当前会话中暂时存储和处理数据。

    22110

    MySQL 对已存在数据表添加自增 ID 字段

    系统环境:Ubuntu 数据库:MySQL5.7 主要是遗留问题,该表本来只是用于分析,同事没有添加自增id,造成后续在处理时,遇到一些问题,权衡之后,决定对表新增一个自增的id字段(表中已经存在大量数据...其他字段省略 ) from 库命.表名 where 1=1 -- limit 200 into outfile '/var/lib/mysql-files/all_202106.txt' fields...上面使用了大量的replace,是因为里面的数据是爬虫所得,格式不统一,且文本中存在大量的空格,跨行等特殊符号需要替换处理,同时为了避免文本中存在和分隔符相同的符号,我们也将其替换为空。...至此,对已存在数据库表添加自增ID操作完成。导出,添加行首空字符,再导入MySQL一共花费3个小时左右时间,基本都花费在导出和导入。...注意:outfile时,如果提示无法导出,是因为数据库outfile导出功能没有开启,或者导出路径没有添加。可以调整secure-file-priv参数的值,具体请自行百度解决。

    3.5K10
    领券