记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节( 三 )


文章插图
我们看下 SQL_MODE ,执行 SELECT @@sql_mode; 得到结果

记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节

文章插图
【记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节】 STRICT_TRANS_TABLES 表明启动了严格模式,对 INSERT 和 UPDATE 语句的 value 管控会更严格
如果我们关闭严格模式,再看看执行结果
记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节

文章插图
 name 字段声明成了 NOT NULL ,非严格 SQL 模式下,将 name 设置成 NULL 是成功的,但更改的值并非 NULL ,而是 VARCHAR 类型的默认值: 空字符串('')
小结下
1、严格 SQL 模式下,对 NOT NULL 的字段设置 NULL ,会直接报错,更新失败
2、非严格 SQL 模式下,对 NOT NULL 的字段设置 NULL ,会将字段值设置字段类型对应的默认值
关于字段类型的默认值,可查看:Data Type Default Values
关于 sql_mode ,可查看:Server SQL Modes
通常情况下,生成环境的 MySQL 一般都是严格模式,所以大家知道有 value DEFAULT 这回事就够了
SET 字段顺序针对如下 SQL
记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节

文章插图
想必大家都很清楚
然而,以下 SQL 中的 name 列的值会是多少
记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节

文章插图
我们来看下结果
记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节

文章插图
 name 的值是不是和预想的有点不一样?
单表 UPDATE 的 SET 是从左往右进行的,然而多表 UPDATE 却不是,多表 UPDATE 不能保证按任何特定顺序进行
总结1、不管是 UPDATE ,还是 DELETE ,都有一个先查的过程,查到一行处理一行
2、 UPDATE 语法中的 LOW_PRIORITY 很少用, IGNORE 偶尔用, ORDER BY 和 LIMIT 相对会用的多一点,都混个眼熟
3、 sql_mode 是比较重要的知识点,推荐大家掌握;生产环境,强烈推荐开启严格模式
参考UPDATE Statement

经验总结扩展阅读