当前位置: 首页 > news >正文

sql_mode(二)宽松模式和严格模式的区别

 

目录

 

设置

一、插入字符串类型

 建表

总结

1、单插 NULL 到 NOT NULL 列(无默认值)

(1)严格模式

(2)宽松模式

2、单插 NULL 到 NOT NULL 列(有默认值)

(1)严格模式

(2)宽松模式

3、批量插入 NULL 到 NOT NULL 列

(1)严格模式

(2)宽松模式

二、插入数字类型

三、更新


设置

我这里的数据库实例的sql mode是严格模式,

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

下面通过修改临时会话的sql mode:再打开一个script会话,设置该tab的session为宽松模式:

-- 只保留最基本模式,宽松但仍防止引擎替代
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';

来对比下宽松模式和严格模式的区别。

一、插入字符串类型

 建表
CREATE TABLE t_user_demo (id varchar(36) NOT NULL,user_id varchar(36) NOT NULL,user_name varchar(36) NOT NULL,PRIMARY KEY (`id`)
) 
CREATE TABLE t_user_demo_1 (id varchar(36) NOT NULL,user_id varchar(36) NOT NULL,user_name varchar(36) NOT null default 'abc',PRIMARY KEY (`id`)
) 
总结

case

严格模式

宽松模式

单插 NULL 到 NOT NULL 列(该列无默认值)

报错

报错

NOT NULL(该列无默认值),单插不指定该列

报错

报错

单插 NULL 到 NOT NULL 列(该列有default值)

报错

报错

NOT NULL(该列有默认值),单插不指定该列

成功,使用默认值

成功,使用默认值

批量插入 NULL 到 NOT NULL 列(该列无默认值)

报错

成功,转成空字符串

批量插入 NOT NULL 列(该列无默认值),不指定列

报错

成功,转成空字符串

批量插 NULL 到 NOT NULL 列(该列有default值)

报错

成功,转成空字符串

批量插入 ,不指定列NOT NULL(该列有默认值)

成功,使用默认值

成功,使用默认值

以下是验证的步骤:

1、单插 NULL 到 NOT NULL 列(无默认值)
(1)严格模式

 报错,插入不成功

不显示插入也报错

(2)宽松模式

显示插入Null同样报错,插入不成功

不显示插入会自动转成空字符串,插入成功

2、单插 NULL 到 NOT NULL 列(有默认值)
(1)严格模式

 报错,插入不成功

不显示指定字段则可以成功

(2)宽松模式

显示插入Null报错,插入不成功

不显示指定字段则可以成功

3、批量插入 NULL 到 NOT NULL
(1)严格模式

显示插入为Null,报错,插入不成功

对于有default值的字段不指定,则可以插入成功:

(2)宽松模式

  不管字段是否有默认值,不管是否显示插入Null,都成功插入。可见宽松模式下,单插显示指定Null会失败,只有不指定该字段可以生成默认值;而批量插入,不管该字段是否有默认值,不管有没有显示插入Null,都可以自动转成默认值插入成功。

chatGPT说的转化并不准确,实际上是批插才有转化。

INSERT INTO t_user_demo_1 (id,user_id,user_name)  VALUES 
('66',null, null),('88',null, null);

二、插入数字类型

三、更新

http://www.lryc.cn/news/571627.html

相关文章:

  • CHASE、CoSQL、SPARC概念介绍
  • 以list为输入条件,查询数据库表,java中的mapper层和mybatis层应该怎么写?
  • 裸金属服务器深度评测:云计算时代的性能与安全担当​​​​
  • centos 7单机安装ceph并创建rbd块设备
  • 博世X阿里云:智能座舱接入通义大模型!
  • MYSQL进阶超详细总结2.0
  • CppCon 2017 学习:CNL: A Compositional Numeric Library
  • Zephyr 高阶实践:彻底讲透 west 构建系统、模块管理与跨平台 CI/CD 配置
  • 微信小程序-数据加密
  • 数据结构 栈与队列 6.18
  • Vue3 × DataV:三步上手炫酷数据可视化组件库
  • Matplotlib快速入门
  • 2D写实交互数字人:让AI形象拥有“真人温度“的技术革命
  • 《HTTP权威指南》 第1-2章 HTTP和URL基础
  • C#实现图片文字识别
  • 【Pandas】pandas DataFrame unstack
  • LVS+Keepalived高可用群集
  • 【请关注】真实案例pg及kong安装部署
  • CppCon 2017 学习:C++ in Academia
  • GNU Octave 基础教程(2):变量与数据类型详解(一)
  • 技术与情感交织的一生 (八)
  • Git中新创建分支是否为空?这可得视情况而定!
  • JVM-类加载机制
  • 论文笔记 <交通灯><多智能体>MetaLight:基于价值的元强化学习用于交通信号控制
  • 20.jsBridge多页面交互与原生事件监听冲突问题
  • 锂电池充电管理芯片XSP30 适用于2-3节串联锂电池升降压快速充电
  • 新发布的一款使用ReactNative新架构加载Svga动画的开源插件[android/ios]
  • 【解决方案】Java 11 报错 <javax.net.ssl.SSLException: Tag mismatch!>,Java 8 却没问题?
  • 二分K-means:让聚类更高效、更精准!
  • Alpine Docker 容器中安装包缓存与 C/C++ 运行问题