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

MySQL 案例:update set 和 and 故事

问题描述 最近接到一个奇怪咨询,update 语句执行没有报错,但是没有更新数据,具体有问题语句类似于如下形式: update test.stu set cname = '0' and math =...90 and his = 80 where id = 100; 原因分析 直观上看,这个 update 语句语法是有问题,正常更新多列数据语法应该是逗号,类似于如下形式: update test.stu...set cname = '0',math = 90,his = 80 where id = 100; 直接 and 第一反应其实是会报语法错误,不太像是能正常执行。...由此可见,MySQL 在语法上,并不认为 and 这个用法是错误,那么说明 MySQL 另外方式“解读”了这个语句。...解决方案 目前并不能通过 sql_mode 或者其他参数形式来阻止这种带 and update 语句,因此这一类问题隐蔽性比较强。

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

    哈希:哈希太大了,还是得用set

    注意题目特意说明:「输出结果中每个元素一定是唯一,也就是说输出结果去重, 同时可以不考虑输出结果顺序」 这道题暴力解法时间复杂度是O(n^2),那来看看使用哈希法进一步优化。...可以发现,貌似数组做哈希可以解决这道题目,把nums1元素,映射到哈希数组下表上,然后在遍历nums2时候,判断是否出现过就可以了。...但是要注意,「使用数据来做哈希题目,都限制了数值大小,例如哈希:可以拿数组当哈希来用,但哈希不要太大题目中只有小写字母,或者数值大小在[0- 10000] 之内等等。」...而这道题目没有限制数值大小,就无法使用数组来做哈希了。 「而且如果哈希比较少、特别分散、跨度非常大,使用数组就造成空间极大浪费。」...:multiset底层实现都是红黑树,std::unordered_set底层实现是哈希, 使用unordered_set 读写效率是最高,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set

    1K30

    函数周期其他丨CONVERT

    CONVERT函数 CONVERT函数被微软划分到“其他”函数里面,隶属于函数。 其实白茶觉得,从某些意义上来讲,应该将CONVERT函数、FORMAT函数、VALUE函数划分到一类。...CONVERT函数可以转换数据类型; FORMAT函数可以调整数据格式; VALUE函数可以转换为。 在一些特定场合,我们不方便修改数据源格式时候,这三个函数会很有用。...返回结果 对应数据类型。 例子 例子1: 例子1 = CONVERT ( DATE ( 2020, 8, 8 ), INTEGER ) 结果: 这是最基本用法,用于修改数据源格式。...---- 注意: 1、FORMAT函数看起来和CONVERT函数类似,但是FORMAT只是转换了显示样式,呈现结果原本是什么类型,就是什么类型;而CONVERT函数是输出新类型,这点小伙伴们注意区分...白茶会不定期分享一些函数卡片 (文件在知识星球[PowerBI丨需求圈]) 这里是白茶,一个PowerBI初学者。

    38230

    《redis in action》Set一些其他操作命令

    记得在第二篇文章中我们介绍了set数据类型一些操作命令,当时说set用来保存不重复元素,并且是无序,我们可以添加、删除,已经确认元素是否在这个set中。...在第二章示例中我们采用set来记录用户是否对文章进行了投票。 在本文中,我们将讨论一些使用频繁set数据结构命令。我们将学习添加、移除已经夸set进行数据移动。...当然我们redis提供set功能并不限于此,redis中set提供了多个set之间操作命令。...如下图所示: sdiff:返回第一个set其他set不一样元素,该命令和数学上集合差集一样 sdiffstore:将两个集合差集存储到一个新集合中去 sinter:返回存在于所有集合中元素...sunion:返回集合并集 sunionstore:返回集合并集并存储到目标set中去。 如上图所示操作演示。对于set一些其他功能,将在第七章通过示例去演示。

    19030

    使用 Set 检测 JavaScript 对象变化

    JavaScript集合是一组有序唯一,对于消除重复非常有帮助。在处理离散数据时,集合是必不可少。...let nums = [4, 4, 4, 4, 2, 2, 2, 3, 3, 3];let distinctNums = new Set(nums);// Set(3) {4,2,3}// 使用展开运算符将集合转换为数组...当使用该数组初始化一个新集合时,它返回了包含7个不同集合。就是这样工作。您可以在MDN上阅读更多有关集合信息。...然后我们使用Setsize属性比较了结婚前集合(结婚前对象)和合并集合(结婚前和结婚后对象)。通常我们将对象文字转换为数组,然后将数组转换为集合。...如果mergedSet大小比beforeSet大小大,这意味着在结婚后对象中有新唯一,或者简单地说用户信息已被更新/修改。

    19800

    mysql 中select for update范围备注

    mysql范围测试 1.主键明确时,行级锁:   解释:指定主键并且数据存在时,仅锁定指定行,其它行可以进行操作   实例:指定了锁定id=1行且数据存在①,在更新1时lock wait超时②...,但是更新id不为1项目时可以直接更新③,释放锁后④,可以任意更新⑤ ?...2.主键不明确时,级锁:   解释:指定主键不明确或者数据不存在时,整锁定   指定主键不明确包括使用in、not in、等  ?...3.使用非主键限定时,级锁:   解释:如果where条件中不存在主键限定而采用非主键筛选,全锁定 ? 所以要实现行级锁来实现高并发场景时,必须明确指定主键,否则整个锁定,影响其它线程操作。...注意:测试时请开两个窗口测试,并且 for update语句要在 begin后 commit前

    3K20

    通俗理解 set,dict 背后哈希

    哈希 Python 中set,dict都是基于哈希数据结构,这两个数据结构有着广泛应用。因此很有必要弄懂哈希原理。 哈希 数组和链表是数据结构两大基石,这个在前面我们多次提到过。...哈希实现也正是基于数组和链表。 哈希最大特点O(1)时间内确定某元素是否位于容器中。下面探讨它是如何基于数组和链表实现。...实现原理 O(1)内确定元素在不在实现原理,一句话总结: 通过一种方法将元素转化为数组index,如果index位置处为None则不存在,不为None则表明存在。...现在想把python字符串存储到数组中,哈希一种做法如下: 使用Pythonhash函数, 然后对数组长度取余数,得到2, 最后将python存储到数组索引2处 ?...链表解决哈希冲突 当存储10时,如上相同存储原理,计算后等于索引2,但是2处已经有数据, 此时发生哈希冲突: ? 其中一种解决方法,在索引2处建立链表,链接到已有数据尾部: ?

    1.8K30

    MySQL|update字段为相同是否会记录binlog

    一 前言 前几天一个开发同事咨询我,update 更新字段为相同是否会记录binlog,我回复说不会。 其实 严格说这个答案是不准确,说要区分场景。...是否记录 update 语句到binlog依赖于 binlog_format 设置。具体情况 实践出真知。 二 测试 2.1 binlog_format 为 ROW 模式 ?...解析binlog内容,完整记录了update语句。 ? 2.2 binlog_format 为 MIXED 模式 ?...三 小结 基于row模式时,server层匹配到要更新记录,发现新和旧一致,不做更新,就直接返回,也不记录binlog。...基于 statement 或者 mixed格式,MySQL执行 update 语句,并把更新语句记录到binlog。 那为什么问题来了 statement 和 mixed 会完整记录sql语句呢?

    6.4K20

    【C++】STL 容器 - set 集合容器 ⑧ ( 查找大于等于指定元素 - set#lower_bound 函数 | 查找小于等于指定元素 - set#upper_bound函数 )

    文章目录 一、查找大于等于指定元素 - set#lower_bound 函数 1、函数原型 2、代码示例 二、查找小于等于指定元素 - set#upper_bound函数 1、函数原型 2、代码示例..., 即 集合中最小 都 大于 给定 , 则返回 迭代器 将等于 end() 末尾迭代器 ; std::set#lower_bound 函数原型如下 : iterator lower_bound...(const key_type& k) const; 参数解析 : 参数类型 key_type 是 std::set 中元素类型 ; 返回解析 : 返回是 指向集合中元素迭代器类型 ; 返回..., 继续将迭代器 自增 , 即可访问 set 集合容器中 大于指定元素后续元素 ; 如果集合中不存在这样元素 , 即 集合中最小 都 小于 给定 , 则返回 迭代器 将等于 end()...是 std::set 中元素类型 ; 返回解析 : 返回是 指向集合中元素迭代器类型 ; 返回 迭代器对象 指向在 set 有序集合中 第一个 大于 给定键值元素 , 继续将迭代器 自减

    34710

    update 修改单多个字段,造成数据混乱

    1.1、模拟问题现象 # 注意: 创建没有主键,且 t1 是 innodb 引擎 root@localhost [keme]>create table t1 (a int,b int,primary...1.2、问题故障原因 因为 update 是当前读,读取是记录数据最新版本 update t1 set a=a+1,b=a+10 where a=2; update a=a+1 因为要做当前读 现在...a =2 +1 后 a=3 ,保证最新 在做 b=a+10 也需要读到a最新 还要加锁, 现在a已经变成3 , 在加10不就变成13 1.3、解决故障 # 我先改回原来数据 root...update 执行当前读,然后把返回数据加锁,之后执行update。 加锁是防止别的事务在这个时候对这条记录做什么,默认加是排他锁,也就是只允许读,其他都不可以,这样就可以保证数据不会出错了。...3、延伸思考 上面的情况是: innodb 引擎 中无主键 如果中有主键,或者是其他引擎,正确操作,请看下面的大神文章 https://imysql.com/2008_06_17_sth_about_update_duplicate_key

    99230

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券