首页
学习
活动
专区
圈层
工具
发布

MySQL这样写UPDATE语句,劝退

# 起因 最近,好几次有开发同学在钉钉上问我,比如下图: 问题归纳起来就是:在MySQL里面update一条记录,语法都正确的,但记录并没有被更新… # 结论 小结:在一条UPDATE语句中,如果要更新多个字段...# 现象 刚遇到这个问题的时候,我拿到这条语句直接在测试库里面执行了一把,发现确实有问题,但和开发描述的还是有区别,这里我用测试数据来模拟下: 有问题的SQL语句: update apps set owner_code...分析 看起来,语法是完全没有问题,翻了翻MySQL官方文档的update语法: 看到assignment_list的格式是以逗号分隔的col_name=value列表,一下子豁然开朗,开发同学想要的多字段更新语句应该这样写...: update apps set owner_code='43212' , owner_name='李四' where owner_code='13245' and owner_name='张三';...小结:在一条UPDATE语句中,如果要更新多个字段,字段间不能使用“AND”,而应该用逗号分隔。

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

    MySQL这样写UPDATE语句,劝退

    来自:ju.outofmemory.cn/entry/336774 最近好几次有开发同学在钉钉上问我,比如下图: 问题归纳起来就是:在MySQL里面update一条记录,语法都正确的,但记录并没有被更新...刚遇到这个问题的时候,我拿到这条语句直接在测试库里面执行了一把,发现确实有问题,但和开发描述的还是 有区别 ,这里我用测试数据来模拟下: 有问题的SQL语句 执行之前的记录是这样的: 执行之后的记录是这样的...看起来,语法是完全没有问题,翻了翻MySQL官方文档的update语法: 看到assignment_list的格式是以逗号分隔的col_name=value列表,一下子豁然开朗,开发同学想要的多字段更新语句应该这样写...小结 : 在一条UPDATE语句中,如果要更新多个字段,字段间不能使用“AND”,而应该用逗号分隔。...后记 : 后面等有空的时候,又回过头来看了一下,为什么使用“AND”分隔的时候,会出现owner_code=0的奇怪结果?

    4.4K40

    MySQL Update语句是怎么执行的?

    MySQL Update语句是怎么执行的?...[isd2tnp037.png] 昨天,我们利用这张图,了解了一个select语句的执行过程,讲解了连接器、查询缓存、分析器、优化器、执行器等模块的作用,今天我们来看一条update语句是怎么执行的...其实,update语句的执行过程和select语句差不多,但是在update语句执行的过程中,MySQL新增加了两个重要的日志模块,他们分别是redo log(重做日志)和binlog(二进制日志、也可以称之为归档日志...图中, write_pos是当前redo log写的位置; checkpoint是redo log擦除的位置; "区域1"部分,也就是checkpoint和write_pos中间的部分,它是写满redo...3、redo log是循环写的,空间固定;binlog是追加写的,写满之后会切换到下一个,不会覆盖 02 update操作究竟做了什么?

    5.3K40

    PostgreSQL - update语句怎么关联多个表

    问题 对于select语句,我们可以通过join/outer join来关联多个表;但是对于update语句,是不能直接通过join/outer join来关联多表数据的,这里仅针对PostgreSQL...或者说,在PostgreSQL中,就算使用update+join不会报错,但join的那部分其实是没任何效果的,如下所示: 1 2 3 4 5 6 7 8 update a set value = 'test...要么update 0条数据,要么全部update!至于是哪种结果,这要看where的条件,目前还不清楚为什么会这样。因为这种写法本身就是不对的!...PostgreSQL中正确的多表关联update写法 在update语句中不应该通过join来进行多表关联,而是要通过from来多表关联,如下: 1 2 3 4 5 6 7 8 update a set...另外补充一句,对于set xxx = 'xxx'这个update的部分,是不可以在column字段前加上表前缀的,比如下边的写法就是有语法错误的: 1 2 update a set a.value =

    6.3K10

    shell中的if判断语句怎么写_shell编程if语句格式

    判断语句介绍 – if 2. if…else 语句(一个条件两个判断结果) 3. if…elif…else 语句(多条件多个判断结果) 4. if嵌套if 语句 5. if 和命令的操作 1....fi 单if 语句流程图: 2. if…else 语句(一个条件两个判断结果) 适用范围: 两步判断,对给定的条件进行判断,条件返回Ture执行Ture语句,条件为False执行else语句。...: 3. if…elif…else 语句(多条件多个判断结果) 使用范围: 多用于两个以上的条件进行判断结果 条件从上至下进行判断,满足则执行条件下的语句并结束if判断。...若都不满足则执行else的语句 else 这个条件不写也可以 if…elif…if 语法格式: if [ condition1 ] => 判断是否满足条件1,满足执行commands1,结束判断...//else => 若上面的条件都不满足,则 执行else下的commandsx // commandsx => 可以不写 fi #l 备注:多条件判断之间存在包容关系,需要从最严格的条件开始判断

    3K10

    java输入语句怎么写_java输入语句应该怎样写?示例演示

    大家好,又见面了,我是你们的朋友全栈君。...作为初步进入java开发学习的小白来说,就像是小时候刚刚学说话一样,这种经历既是必然的也是有趣的,学习java语言一开始的时候也是得一步步的学习,比如说,java输入语句应该这么去实现呢?...char c=(char)System.in.read();是输入单个字符;int a=cin.nextInt();是输入一个整数;double b=cin.nextDouble();是输入一个双精度的浮点数...; Scanner input =new Scanner(System.in); input -声明的变量名 new Scanner() -给变量input分配空间,初始化,实例化 System.in...-参数, 这里就是获取输入流的意思 当你需要提示输入一个变量时,输入以下语句: System.out.println(“请输内容:”); double b =scan.nextDouble(); 当你点击输出时

    5.2K20

    update语句的redo log过程

    update语句是如何执行 , 如何将执行后的新数据持久化在磁盘中 可以假设两种情境: 1. 假设MySQL在更新之后只更新内存中的数据就返回,然后再某一时刻进行IO将数据页持久化。...这样所有操作都是在内存中,可以想象此时的MySQL性能是特别高的。但是,如果在更新完内存又还没有进行持久化的这段时间,MySQL宕机了,那么我们的数据就丢失了。 2....我们来看看MySQL是如何做到保证性能的情况下,还保证数据不丢的。 update 表 set a = 1 where id = 1; 如何保证数据一致性 ?...但是,InnoDB的redo log是固定大小的,比如可以配置为一组4个文件,每个文件的大小是1GB。固定大小也就造成了一个问题,redo log是会被写满的。 2. InnoDB采取了循环写的方式。...write_pos表示当前写的位置,只要有记录更新了,write_pos就会往后移动。

    1.3K20

    几种更新(Update语句)查询的方法

    正 文: 数据库更新就一种方法Update, 其标准格式:Update 表名 set 字段=值 where 条件 只是依据数据的来源不同,还是有所差别的: 1.从外部输入 这样的比較简单 例:update...() where UserID=”aasdd” 3.对某些字段变量+1,常见的如:点击率、下载次数等 这样的直接将字段+1然后赋值给自身 update tb set clickcount=clickcount...+1 where ID=xxx 4.将同一记录的一个字段赋值给还有一个字段 update tb set Lastdate= regdate where XXX 5.将一个表中的一批记录更新到另外一个表中...table1 ID f1 f2 table2 ID f1 f2 先要将table2中的f1 f2 更新到table1(同样的ID) update table1,table2 set table1....price更新到1月份中 显然,要找到2月份中和1月份中ID同样的E_ID并更新price到1月份中 这个全然能够和上面的方法来处理,只是因为同一表,为了区分两个月份的,应该将表重命名一下 update

    3.2K20

    关于update语句的性能测试(62天)

    今天对表的update进行了性能测试,收获不小。在linux 64位的环境中测试, 数据量是按照40万左右的标准进行的测试。...没有考虑索引(没有添加索引),没有考虑执行计划优化的影响,为了保证每次执行的环境基本一致,每次执行sql语句之前都先清空buffer cache....为了横向比较结果,缩小结果的误差,对表test使用了两条类似的sql语句,比较执行的结果,看看有多大的误差。...使用的sql语句为: update test set test='a'; update test set test=''; 基本上可以看出一些数据的执行情况, 在表为noparallel的情况下,使用...update test set test='a';update test set test='';table noparallelloggingsession parallel Elapsed: 00:

    1.4K70
    领券