MySQL运维实战(4.4) SQL_MODE之STRICT_TRANS_TABLES和STRICT_ALL_TABLES

作者:俊达

1 STRICT MODE

在MySQL中,STRICT模式主要用于控制数据库的行为,有助于保持数据的一致性和完整性,特别是在涉及到数据写入、更新和其他操作时的约束。
如果设置STRICT模式,MySQL会更加严格地执行数据写入和更新等操作,当数据不符合字段定义或者违反了约束条件,MySQL将抛出错误,相关操作也会被拒绝。例如,在数据写入时,如果数据不符合字段定义(字符串超出长度、数值类型数据超出范围、违反not null约束等),SQL会报错。
如果不设置STRICT模式,MySQL在遇到异常数据时可能会进行截断处理,SQL会显示Warning,但不报错。对于组合型SQL,对于非事物型存储引擎,如MyISAM存储引擎,一个SQL中部分数据合法,部分数据不合法,则可能会在表中写入部分数据,但截断或修改为合法值,而不会导致整个操作失败。虽然没有立即的错误,但这可能会导致数据丢失或不一致。

2 设置STRICT_ALL_TABLES

在所有表上执行严格模式检查。对于非事务型存储引擎如MyISAM,可能会出现批量Insert中部分数据写入成功、部分数据写入失败的情况。事务型存储引擎如InnoDB不存在该问题。

mysql> create table t_innodb(a int) engine=innodb;
Query OK, 0 rows affected (0.02 sec)mysql> create table t_myisam(a int) engine=myisam;
Query OK, 0 rows affected (0.01 sec)mysql> set sql_mode='STRICT_ALL_TABLES';
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> insert into t_innodb values(1),('abc'),(3);
ERROR 1366 (HY000): Incorrect integer value: 'abc' for column 'a' at row 2mysql> select * from t_innodb;
Empty set (0.00 sec)mysql> insert into t_myisam values(1),('abc'),(3);
ERROR 1366 (HY000): Incorrect integer value: 'abc' for column 'a' at row 2mysql> select * from t_myisam;
+------+
| a    |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

3 设置STRICT_TRANS_TABLES

与STRICT_ALL_TABLES不同,设置STRICT_TRANS_TABLES模式仅在事务表上执行更严格的检查,包括对插入和更新的数据类型和值的验证,而不影响往非事务型引擎中写入非法数据。

mysql> set sql_mode='STRICT_TRANS_TABLES';
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> insert into t_innodb values(10),('abc'),(30);
ERROR 1366 (HY000): Incorrect integer value: 'abc' for column 'a' at row 2mysql> insert into t_myisam values(10),('abc'),(30);
Query OK, 3 rows affected, 1 warning (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 1mysql> show warnings;
+---------+------+--------------------------------------------------------+
| Level   | Code | Message                                                |
+---------+------+--------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: 'abc' for column 'a' at row 2 |
+---------+------+--------------------------------------------------------+
1 row in set (0.01 sec)mysql> select * from t_myisam;
+------+
| a    |
+------+
|    1 |
|   10 |
|    0 |
|   30 |
+------+
4 rows in set (0.00 sec)

4 不设置STRICT模式

不设置STRICT模式,则可以写入非法数据。SQL会有warning,非法的数据,会根据字段类型做相应的处理。

总体而言,选择是否设置STRICT模式取决于你所应用的场景以及数据的需求。在部分情况下,选择STRICT模式可以更好地确保数据的完整性。在其他情况下,禁用STRICT模式可能更灵活,但需要谨慎处理潜在的数据问题。
更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/630610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言——小细节和小知识12

一、倒置句子 将句子中的单词位置倒置,标点不用倒置,例如i love you.倒置结果是:you. love i。 1、两步翻转法 采用两步翻转法来实现单词位置的倒置。首先,它整体翻转整个字符串,然后再逐个翻转每个单词内的字符。 …

redis安装-Linux为例

可以下载一个Shell或者MobaXterm工具,便于操作 在redis官网下载压缩包 开始安装 安装依赖 yum install -y gcc tcl切换目录 切换目录后直接把redis安装包拖到/user/local/src/下 cd /user/local/src/解压然后安装 #解压 tar -zxvf redis-7.2.4.tar.gz #安装 …

day13

1.多态的向上转型和向下转型向上转型: 父类的引用指向子类的对象Person person new Man();向下转型: 将父类的引用强转为子类的对象Man man (Man) person; 2.instanceof关键字的用法引用 intanceof 运行类型 3.抽象类声明方式abstract class Person {} 4.接…

后端开发笔记20240117

文章目录 1.lambda表达式学习1.1 从list中找到符合条件的对象并且返回1.2 groupby的用法 2.时间做差取秒 1.lambda表达式学习 1.1 从list中找到符合条件的对象并且返回 这种案例在java中的应用很多,适用于轻度过滤,如果能sql直接查询出符合规定的那肯定…

python数字图像处理基础(六)——模板匹配、直方图

目录 模板匹配概念单对象模板匹配多对象模板匹配 直方图1.查找直方图2.绘制直方图3.掩膜的应用 模板匹配 概念 模板匹配和卷积原理很像,模板在原图像上从原点开始滑动,计算模板与图像被模板覆盖的地方的差别程度,这个差别程度的计算方法在o…

openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_paramvalidate.c

文章目录 openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_paramvalidate.c概述笔记END openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_DSA_paramvalidate.c 概述 OPENSSL_hexstr2buf_ex 将16禁止字符串填充到16进制buffer BIO_new_mem_buf 有用, 可以内存的内容转为bio, 不…

如何安装“Nextcloud 客户端”win10系统?

1、 下载 Nextcloud的官网 Download and install Nextcloud 2、安装 3、 Nextcloud登录

组件v-model(.sync)记录使用(vue3)

示例(演示地址) 以下是Vue3中使用v-model实现组件的双向数据绑定的示例代码: 首先,让我们来了解一下Vue3中v-model的用法。在Vue3中,v-model 指令可以用于自定义组件上,用于实现组件的双向数据绑定。与Vue2…

python元类模型和class语句协议

1 python元类模型和class语句协议 学习python的类型模型和class语句协议。class语句末尾自动调用type()创建类对象并且赋值给类名称。 1.1 类是类型的实例 python3.x中,用户定义的类对象是名为type的对象的实例,type本身是一个类; python…

【温故而知新】HTML5存储localStorage/sessionStorage

文章目录 一、概念二、存储localStorage三、存储sessionStorage四、区别及优缺点1. 区别:2. 优缺点: 一、概念 HTML5是HTML的最新版本,它引入了许多新的元素和功能,以适应现代网页开发的需求。以下是HTML5的一些主要特点&#xf…

Alinx ZYNQ 7020 LED调试--in RAM

设置拨码开关为JTAG方式 烧写LED bit stream a. 点击“Program device”烧录程序到FPGA中(重新上电程序就丢失了) b. /01_led/led.runs/impl_1/led.bit 程序烧录到Flash中 ZYNQ与以往的直接烧录Flash不同,首先必须PS,然后烧…

python实例100第23例:打印菱形图案

题目:打印出如下图案(菱形): ********* ****************程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列…

golang中make与new有什么区别?

前言 记录下go语言中函数new与make的使用和区别,关于go语言中new和make是内建的两个函数,主要用来创建分配类型内存。 目录 前言make介绍用法:1. 创建切片(slice):2. 创建映射(map)…

AWS Secrets Manager 实战指南

AWS Secrets Manager 是一项强大的服务,用于安全地管理和存储敏感信息,如数据库凭证、API 密钥等。本实战指南将指导你如何在实际应用中使用 AWS Secrets Manager。 创建 Secret 首先,我们需要在 Secrets Manager 中创建一个新的 Secret 来存储敏感信息。 登录 AWS 控制台…

2744. 最大字符串配对数目

Problem: 2744. 最大字符串配对数目 文章目录 思路解题方法复杂度Code拓展官方解法拓展解释 思路 要求返回数组中的反转字符数目;数组中每个元素都是固定的2个长度的小写字符串,且不相同;由不相同可知如果是aa,bb这种类型的必定不…

spring-boot定时任务

org.springframework.boot jar包 内置定时任务注解 。生成定时任务有 * * * * * ? 表示秒分时日月周。 日和周的位置 必须某个位置用?代替*号用于区别。 定时任务规则:0 * * * ? * * 表示任意月的任意周的每天的每时的每分…

抖音矩阵云混剪系统源码(免授权版)多平台多账号一站式管理,附带系统搭建教程

搭建教程 MySQL 5.6 PHP 7.2 Apache 数据库名称 juzhen Nginx环境切换伪静态 1、解压安装包到项目根目录,找到application/database.php 更换自己的数据库密码 2、阿里云现有的配置不要动 其他按照文档进行添加 3、项目访问目录:public 4、域名…

SQL笔记 -- 查询优化

1. 关联查询优化 1.1 驱动表和被驱动表 对于内连接来说,优化器会根据用户的查询语句做优化,决定先查哪张表。先查询的那张表就是驱动表,反之就是被驱动表。而对于外连接来说,大多数情况用户指定的主表就是驱动表,但优…

Demo: 实现PDF加水印以及自定义水印样式

实现PDF加水印以及自定义水印样式 <template><div><button click"previewHandle">预览</button><button click"downFileHandle">下载</button><el-input v-model"watermarkText" /><el-input v-mo…

敏捷开发之Scrum

敏捷开发是什么 我们一般习惯用瀑布模型&#xff0c;它以文档为驱动&#xff0c;将软件生命周期划分为固定的六个基本活动&#xff0c;并且规定了它们自上而下、相互衔接的次序&#xff0c;如同瀑布流水&#xff0c;逐级下落。 那什么是敏捷开发呢&#xff1f; ​ 敏捷开发的核…