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

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

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

9.2K20

SQL修改数据库

使用SQL插入数据INSERT语句将一条新记录插入SQL表中。 可以插入一条记录或多条记录。下面的示例插入一条记录。...如果SQL表中不存在新记录,则该语句将该记录插入该SQL表中。 如果记录存在,则该语句使用提供的字段值更新记录数据。使用对象属性插入数据可以使用ObjectScript插入一条或多条数据记录。...%Save() }UPDATE语句UPDATE语句修改SQL表中的一条或多条现有记录中的值:UPDATE语句修改SQL表中的一条或多条现有记录中的值:在插入或更新时计算字段值在定义计算字段时,可以指定ObjectScript...如果事务%COMMITMODE为NONE,则必须显式指定START transaction来启动事务处理。...例如,如果插入IDKey为17、18和19的记录,然后回滚此插入,则下一条要插入的记录的IDKey将为20。缓存查询的创建、修改和清除不是事务操作。

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

    SQL优化——如何高效添加数据

    #主键乱序插入 : 6 2 9 7 2 #主键顺序插入 : 1 2 4 6 8 优化方案4:load指令添加数据 如果一次性需要插入大批量数据(比如几百万的记录),使用insert语句可能需要花费几十分钟...: 如果local_infile显示为0,则表示开关并未开启,则需要手动设置为1。...select @@local_infile; 结果显示如下: 举个栗子: 假设要上传100万条数据,要上传的文件路径是'/root/load_user_100w_sort.sql',则往表tb1中添加数据的完整...在索引组织表中,页是InnoDB磁盘管理的最小单元,其固定大小为16K。页可以为空,也可以填充一半,也可以填充满。...最终过程如下: 与页分裂相对,还有页合并现象: 当删除一行记录时,实际上记录并没有被物理删除,只是记录被标记(flaged)为删除并且它的空间变得允许被其他记录声明使用。

    1.6K32

    用Python操作MongoDB,看这一篇就够了

    ” 删除数据db.collection.remove(查询表达式, 选项justOne) 选项justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false...#统计结果中的文档数 db.集合名称.find({条件}).count() mongodb与python的交互 用Python 操作 MongoDB 非常方便,无需定义表结构就可以直接将数据插入,使用...可以使用insert方法插入数据,但在pymongo中,官方推荐使用 insert_one 完成单个数据的写入,insert_many 完成多条数据的插入。...image-20210525184227433 6.查询数据 find()查找全部数据 返回所有满足条件的结果,如果条件为空,则返回全部结果,返回结果是一个Cursor游标可迭代对象。...pymongo.ASCENDING) print([result['age'] for result in results]) find_one()查找一条数据 接收一个字典形式的条件,返回字典形式的整条数据,如果条件为空

    2.4K30

    MySQL DML 操作

    1.1 概述   DML(Data Manipulation Language)数据操作语言,以 INSERT、UPDATE、DELETE 三种指令为核心,分别代表插入、更新与删除,DML 和 DQL...1.2 新增(create)   当我们需要向数据库表中插入一条新记录时,就需要使用 INSERT 语句。...先列举出需要插入的字段名称,然后在 VALUES 子句中依次写出对应字段的值,还可以一次性添加多条记录,只需要在VALUES子句中指定多个记录值。 ?...如果 WHERE 条件没有匹配到任何记录,UPDATE 语句不会报错,也不会有任何记录被更新。UPDATE 语句可以没有 WHERE 条件,这时,整个表的所有记录都会被更新。...1.4 删除(delete)   如果要删除数据库表中的记录,可以使用 DELETE 语句。

    1.1K31

    约束

    是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值 2....字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值 sex enum('male','female') not null default 'male' age int...默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值 create table tb1( nid int not null...foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录...表2的多条记录也可以对应表1的一条记录 一对一: 表1的一条记录唯一对应表2的一条记录,反之亦然 分析时,我们先从按照上面的基本原理去套,然后再翻译成真实的意义,就很好理解了 三张表

    2.4K80

    一个基于PDO的数据库操作类(新) + 一个PDO事务实例

    php /* * 作者:胡睿 * 日期:2011/03/19 * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录、多条记录,返回最新一条插入记录id,返回操作记录行数等...sql语句 int $mode 0 返回数组 1 返回单条记录 2 返回行数 string $table 数据库表 string $fields...需要查询的数据库字段,允许为空,默认为查找全部 string $sqlwhere 查询条件,允许为空 string $orderby 排序,允许为空,默认为id倒序 */ function...sql语句 int $mode 0 默认insert,无返回信息 1 返回执行条目数 2 返回最后一次插入记录的id string $table...数据库表 string $fields 需要插入数据库的字段 string $values 需要插入数据库的信息,必须与$fields一一对应 */ function hrInsert

    42830

    第37次文章:数据库基本语法

    三、意义 1、将一条比较复杂的查询语句拆分成多条语句 2、适用于查询多个表的时候,查询的列基本是一致的 四、特点 1、要求多条查询语句的查询列数必须一致 2、要求多条查询语句的查询的各列类型、顺序最好一致...连接条件set 列=值,....where 筛选条件 3、案例 #1.修改单表中的记录 #案例:修改beauty表中姓杨的女神电话为11122233344 UPDATE beauty SET phone...,会报out of range异常,插入临界值 长度可以不指定,默认会有一个长度 长度代表显示的最大宽度,如果不够则左边用0填充,但需要搭配zerofill,并且默认变为无符号整型。...tips:当设置为无符号时,插入负数,将会在数据库中用0进行填充。...如果精度要求较高,则优先考虑使用定点数。如:货币运算等则考虑使用。 tips:double所占字节数为8,float所占字节数为4,无其他区别。

    1.3K10

    最全总结 | 聊聊 Python 数据处理全家桶(Sqlite篇)

    :return: """ self.conn.execute(SQL_CREATE_TABLE) 接下来,我们通过增删改查来操作数据表 1、新增 同样以新增单条数据和多条数据为例...可以实现一次插入多条数据 # 插入多条数据(3个变量,包含:id、name、value) SQL_INSERT_MANY_DATA = 'INSERT INTO PEOPLE (id,name,age)...() except Exception as e: self.conn.rollback() print('插入多条记录失败,回滚~') 2、查询 查询分为 2...(bind=engine)() 这样所有的准备工作已经完成,接下来可以进行增删改查操作了 1、新增 新增操作同样以新增一条和多条记录为例,它们分别对应会话对象的 add()、add_all() 方法...(people) # 必须提交,才能更新到数据库中 self.session.commit() 如果需要一次插入多条数据,只需要调用 add_all(列表数据) 即可 def add_datas

    1.2K30

    MySQL——insert注意事项

    目录​ 插入的数据应与字段的数据类型相同  数据的长度应该在列的规定范围内 在values列出的数据位置必须与被加入的列的排列位置相应  字符和日期类型的数据应该包含在单引号中 列可以插入空值...前提是该字段允许为空 列名后面可以添加多条记录  向表中的所有字段添加数据时,可以不写前面的字段名称                         默认值的使用 友友们 大家好呀 我是你们的小王同学...因为goods_name是一个varchar类型 是字符串要用单引号引起来 列可以插入空值 前提是该字段允许为空 insert into `goods`(id ,goods_name,price) values...NOT NULL之后就不允许插入空值了!...就会出现图片上的错误 列名后面可以添加多条记录 insert into `goods` values (50,'三星手机',2300),(60,'海尔手机',1900);  向表中的所有字段添加数据时

    1.2K20

    表——完整约束性规则(键)

    是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值 2....字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值 sex enum('male','female') not null default 'male' #设置了不能为空...二 not null与default 是否可空,null表示空,非字符串 not null - 不可空 null - 可空 默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值...foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录...表2的多条记录也可以对应表1的一条记录 一对一: 表1的一条记录唯一对应表2的一条记录,反之亦然 分析时,我们先从按照上面的基本原理去套,然后再翻译成真实的意义,就很好理解了 #多对一或称为一对多

    2.4K70

    mysql表中数据的增删改

    情况1:为表的所有字段按默认顺序插入数据 使用INSERT同时插入多条记录时,MySQL会返回一些在执行单行插入时没有的额外信息,这些信息的含义如下: ● Records:表明插入的记录条数。...因为MySQL执行单条INSERT语句插入多行数据比使用多条INSERT语句快,所以在插入多条记录时最好选择使用单条INSERT语句的方式插入。...字符和日期型数据应包含在单引号中 INSERT还可以将SELECT语句查询的结果插入到表中,此时不需要把每一条记录的值一个一个输入,只需要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入多行...如果省略 WHERE 子句,则表中的所有数据都将被更新。 ...更新中的数据完整性错误   删除数据 使用 DELETE 语句从表中删除数据  table_name指定要执行删除操作的表;“[WHERE ]”为可选参数,指定删除条件,如果没有WHERE子句,DELETE

    2.6K30

    MySQL之表的约束

    是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值 2....默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值 create table tb1( nid int not null...  分析步骤: #1、先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) #2、再站在右表的角度去找 是否右表的多条记录可以对应左表的一条记录...,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id) #3、总结: #多对一: 如果只有步骤1成立,则是左表多对一右表 如果只有步骤2成立,则是右表多对一左表 #多对多...如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系 #一对一: 如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然

    4.9K60

    MySql的基本操作以及以后开发经常使用的常用指令

    22:记录的查找命令SELECT(查看表里面的内容) 记录查找 SELECT * FROM  t1; ? 23:空值和非空值 NULL:字段值可以为空 NOT NULL:字段值禁止为空 ? ?...27:默认约束DEFAULT 默认值 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值 ? ? ? ? 扩展,修改表的名字 ?...55:右连接查询:(可以查询出表名2 的所有记录,而表名1中只能查出匹配的记录);右连接别名查询省去没写,请自行脑补。 ? 56:多条件查询,其实就是后面使用AND连接一下,进行多条件查询即可。...60:带有EXISTS关键字的子查询 假如子查询查询到记录,其实就是判断一下内层为ture,则进行外层查询,如果为false,不执行外层查询 ? 带有NOT EXISTS关键字的子查询 ?...81:查看视图的基本信息,对比显示出视图是一个虚表 ? ? 82:查看视图的详细信息 ? 83:CREATE修改视图,如果视图不存在则创建,如果存在则修改 ?

    2K100

    Python SQLite 基本操作和经验技巧(一)

    文章目录 1.插入单行数据 2.插入多行数据 3.判断sqlite是否存在某个表,不存在则创建 4.在SQLite数据库中如何列出所有的表和索引 5.sqlite避免重复插入数据 6.sqlite3时游标的使用方法...入门操作 创建数据表 插入两条数据 选择(select) 修改(update) 删除(delete) 连接对象方法: 游标对象方法: 7.数据库连接对象 8.使用游标查询数据库 9.判断cursor的结果是否为空...注意,游标是有状态的,它可以记录当前已经取到结果的第几个记录了,因此,一般你只可以遍历结果集一次。在上面的情况下,如果执行fetchone()会返回为空。这一点在测试时需要注意。...cu=cx.cursor() 游标对象有以下的操作: execute()–执行sql语句 executemany–执行多条sql语句 close()–关闭游标 fetchone()–从结果中取一条记录...,并将游标指向下一条记录 fetchmany()–从结果中取多条记录 fetchall()–从结果中取出所有记录 scroll()–游标滚动 9.判断cursor的结果是否为空 db = sqlite3

    5.3K30

    第十三章 Python数据库编程

    ,没有默认库 port 数据库端口,默认3306 connect_timeout 连接超时时间,秒为单位 use_unicode 结果以unicode字符串返回 charset 插入数据库编码 连接对象返回的...对支持事务的数据库和表,如果提交修改操作,不适用这个方法,则不会写到数据库中 rollback() 事务回滚。对支持事务的数据库和表,如果执行此方法,则回滚当前事务。在没有commit()前提下。...游标对象也提供了几种方法: close() 关闭游标 execute(sql) 执行sql语句 excutemany(sql) 执行多条sql语句 fetchone() 从执行结果中取第一条记录 fetchmany...cursor.execute('select * from user')            1L >>> cursor.fetchall() ((1L, u'xiaoming', u'123456'),) 13.1.2 插入多条数据...当查询多条记录时,使用此方法,可有效提高插入效率。

    31920
    领券