1、STRICT_TRANS_TABLES模式:

对于InnoDB表,sql插入执行失败,会报错,全部回滚。

例1:

value定义:int(1)

失败原因:s不能转换为integer

例2:

失败原因:int长度超过了2147483647

查询执行结果:

对于MyISAM表,sql插入执行失败:

1、如果是第一行数据出错,则会报错,会回滚

value定义:int(1)

失败原因:aa不能转换为integer

查询执行结果:

2、如果是大于第一行数据出错,MySQL将非法值转换为最接近该列的合法值并插入调整后的值。如果不能转换,MySQL在列中插入隐式默认值。在任何情况下,MySQL都不会报错(除非语法错误),并会继续执行语句。

查询执行结果:

解析:第一行是合法值,所以不管后面的行是不是合法都会继续插入。

第二行s2不能转换为integer,所以插入了隐式默认值0。

第三行和第四行的值超过了定义的int(1),范围:[-2147483648,2147483647],所以转换成了最接近的值。

2、STRICT_ALL_TABLES模式:

对于InnoDB表,和STRICT_TRANS_TABLES模式相同

对于MyISAM表,sql插入执行失败会保存错误发生之前修改的行,忽略剩下的行,并报错。

查询执行结果:

总结

1、对于InnoDB表,STRICT_TRANS_TABLES与STRICT_ALL_TABLES模式效果一样,插入报错就全部回滚。

2、对于MyISAM表

STRICT_TRANS_TABLES:

1、插入第一行数据失败会报错,会回滚并且停止。

2、大于第一行之后的插入数据失败,mysql会把不合法的值强转为最为接近的值 或者隐式默认值,并且不会报错。

STRICT_ALL_TABLES:如果插入执行失败会保存错误发生之前插入的行,忽略剩下的行,并报错。

如果觉得有帮助,就在下面点个赞吧

附带:

1、两张表生成sql

CREATE TABLE `table1` (`id` int(11) NOT NULL AUTO_INCREMENT,`value` int(1) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8;
CREATE TABLE `table2` (`id` int(11) NOT NULL AUTO_INCREMENT,`value` int(1) DEFAULT '99',PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=74 DEFAULT CHARSET=utf8;

2、sql_mode设置

set GLOBAL sql_mode='NO_AUTO_VALUE_ON_ZERO,STRICT_ALL_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

设置完关闭数据库连接,然后重新连接才会生效,查看是否设置成功:

select @@session.sql_mode;

这种设置方式只要MYSQL服务器重启就会失效。

sql_mode中的STRICT_TRANS_TABLES和STRICT_ALL_TABLES区别相关推荐

  1. MySQL数据库模式(SQL_MODE)中的STRICT_TRANS_TABLES和STRICT_ALL_TABLES

    - Innodb Myisam STRICT_TRANS_TABLES 无论插入单行或是多行,只要插入数据与字段类型不兼容,则insert操作失败并回滚 插入单行数据与字段类型不兼容,则insert操 ...

  2. python中break和continue的区别

    python中break和continue的区别 break 结束for 或者while 循环  后面还没循环到的 不再循环 continue 当满足某种条件时结束当前值的循环 后面没有循环的继续循环 ...

  3. java中separator_java - File.separator和路径中的斜杠之间的区别

    java - File.separator和路径中的斜杠之间的区别 在Java Path-String中使用/和普通的File.separator有什么区别? 与双反斜杠相比,/平台独立似乎不是原因, ...

  4. PHP中self和static的区别,php中self与static的区别

    原文链接,猛击这里. php中self与static的区别 通过一些示例,我们可以很容易看出self和static的区别.假定我们有class Car – 它有两个方法,model和getModel. ...

  5. php 抽象类 接口 区别,PHP中抽象类、接口的区别与选择分析

    本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过 ...

  6. php $this self,php中self与$this的区别

    学习php中self与$this的区别. 先来看下parent与self的例子: /* * parent与self的区别 * by www.jbxue.com */ class A{ function ...

  7. mysql中char与varchar的区别分析(补充一句,int和integer没区别)

    转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...

  8. python中bytearray和java中byte[]的区别_Python经典面试题:说说Python中xrange和range的区别?...

    昨晚一小伙后台问xrange和range有啥区别,讲了下他倒领悟的挺快,其实这也是你各面试Python岗位,经常会遇到的Python面试题,长个心眼哈,说不定明年3月你找工作就用上了. 废话不多说,开 ...

  9. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

最新文章

  1. 学Java需要学哪些书?
  2. 全国计算机等级考试第3套,全国计算机等级考试四级计算机网络第3套试题
  3. python syntaxerror怎么解决-python中出现invalid syntax报错的几种原因
  4. P4062 [Code+#1]Yazid 的新生舞会(分治做法)
  5. Java int 转大端序、小端序
  6. Visual Studio进行linux远程开发
  7. python从数据库取数据 显示字段名_如何在python中将SQL数据库中的字段名放入列表中...
  8. git rm -r --cached_【Git】工作中99%能用到的git命令
  9. java jxl写excel_java jxl 大量数据写入excel,比如上千万条
  10. 【2020年TI杯江苏省大学生电子设计竞赛回顾——C题:坡道行驶电动小车(江苏省二等奖)】
  11. 小米手机开发者选项在哪?小米手机怎么打开开发者选项
  12. linux立即重启计算机命令,轻松掌握Linux关机重启命令
  13. Packet Tracer 6.0基础知识
  14. “Android开发3年老板嫌我工资高,把我辞了
  15. 关于搭建Vue项目的顺序及遇到的问题
  16. CVTE Java后台电话一面
  17. java 视频截取图片 linux,在Windows和Linux下用JAVA调用FFMPEG 3.x进行视频截图的最新范例...
  18. winpcap+pyhton环境搭建
  19. 脉冲电子围栏系统介绍_脉冲电子围栏系统构成原理及优势分析
  20. ssj框架的搭建流程

热门文章

  1. 农业领域的知识图谱构建(Agriculture_KnowledgeGraph)
  2. 【无标题】甘肃教育期刊征稿
  3. python 监控文件夹存入的文件_文件夹 python
  4. 阿里分布式事务框架 GTS 全解析
  5. 2022年Landsat8/9 Collection2数据 ENVI5.3打开(暴力打开,亲测有效)
  6. Turbine概念及其使用
  7. java 方法命名规范_Java命名规范
  8. 在Proteus中添加元件库所没有的单片机芯片(STM32F407ZGT6为例)
  9. java swt griddata_SWT的GridData一些参数的图示
  10. GridData 布局说明