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. 十进制字符串转十六进制字符串
  2. IDEA代码格式化快捷键(新)
  3. 网站转移到新服务器后显示乱码,请问在国内制作的英文网站放到国外的服务器后在国外打开怎么全是乱码?...
  4. nodejs 实现抓取数据
  5. HDU 2049 不容易系列之(4)——考新郎( 错排 )
  6. 拥抱.NET Core,如何开发一个跨平台类库 (1)
  7. Mac 安装 MySQL
  8. 怎么用javascript进行拖拽[zt]
  9. mysql 介于两个日期函数_帮忙看一上这个mysql函数,用来返回两个日期之间的年数...
  10. mysql 连接数和内存的关系_php-fpm进程数和mysql连接数之间的关系
  11. POJ- 1751 Highways
  12. MQ方法解决分布式事务图
  13. Matplotlib风羽自定义
  14. 计算机二级c教程ppt,计算机国家二级C语言教程 第一二章.ppt
  15. Android解包打包system img的方法
  16. 【CSDN】如何设置图片大小(等比例)
  17. 突出编程扩展,Gartner更新“企业级低代码开发平台的关键能力”清单
  18. 仿天天动听5应用项目源码
  19. 如何写一个完整的django网站:配置环境啥的不讲(python+mysql+html相关) 壹
  20. 通过交换相邻数来完成排序所需要的最少交换次数

热门文章

  1. php程序员年终总结
  2. 2022年Landsat8/9 Collection2数据 ENVI5.3打开(暴力打开,亲测有效)
  3. 一个非python的电脑打印机连接过程分享
  4. sqlserver取模_sqlserver取模_SqlServer基础知识点(T-SQL语言基础)
  5. MATLAB----其他形式的二维曲线
  6. 执行tox -egenconfig出现错误genconfig: could not install deps [-r/home/mistral/test-requirements.txt]
  7. 考试如何用计算机,注会考试计算器如何使用 达江老师教你一招
  8. HTML+CSS实现奥运五环
  9. AutoSAR操作系统以及概念
  10. 航天航空飞机火箭模型3D打印制作服务/增材制造航空模型制作