首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 查看是否是严格模式

基础概念

MySQL的严格模式(Strict Mode)是一种配置选项,用于控制数据库在处理数据时的行为。当启用严格模式时,MySQL会对插入或更新的数据进行更严格的检查,以确保数据的完整性和一致性。

相关优势

  1. 数据完整性:严格模式可以防止插入无效或不完整的数据,从而提高数据的完整性。
  2. 错误检测:严格模式可以帮助开发者更快地发现和修复数据插入或更新中的错误。
  3. 一致性:确保所有数据都符合预定义的规则和约束。

类型

MySQL的严格模式主要有两种类型:

  1. STRICT_TRANS_TABLES:在这种模式下,MySQL会对事务表进行严格的检查。如果插入或更新的数据违反了约束条件,事务将被回滚。
  2. STRICT_ALL_TABLES:在这种模式下,MySQL会对所有表进行严格的检查,无论它们是否是事务表。

应用场景

严格模式适用于需要确保数据完整性和一致性的应用场景,例如:

  • 金融系统
  • 医疗系统
  • 电子商务系统

查看是否是严格模式

要查看MySQL是否启用了严格模式,可以使用以下SQL查询:

代码语言:txt
复制
SHOW VARIABLES LIKE 'sql_mode';

这个查询将返回一个包含当前sql_mode变量值的列表。如果列表中包含STRICT_TRANS_TABLESSTRICT_ALL_TABLES,则表示启用了严格模式。

示例代码

代码语言:txt
复制
-- 查看当前的sql_mode
SHOW VARIABLES LIKE 'sql_mode';

-- 如果需要启用严格模式,可以使用以下命令
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

参考链接

遇到的问题及解决方法

问题:插入数据时遇到Data truncated for column错误

原因:这个错误通常是由于插入的数据长度超过了列定义的长度。

解决方法

  1. 检查插入的数据长度,确保它不超过列定义的长度。
  2. 如果需要,可以修改列的定义以允许更长的数据。
代码语言:txt
复制
-- 修改列定义
ALTER TABLE table_name MODIFY column_name VARCHAR(new_length);

问题:插入无效数据时没有回滚事务

原因:可能是因为没有启用严格模式。

解决方法

  1. 启用严格模式,如前所述。
代码语言:txt
复制
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
  1. 确保事务正确配置,以便在发生错误时回滚。
代码语言:txt
复制
START TRANSACTION;
-- 插入或更新数据
INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2');
COMMIT;

通过以上方法,可以有效地管理和解决与MySQL严格模式相关的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

什么是JavaScript的 严格模式

在本文中,我们将深入探讨什么是严格模式、如何启用它以及它提供的好处。 什么是严格模式? 严格模式是一种选择受限的 JavaScript 变体的方式。...启用严格模式 要在 JavaScript 中启用严格模式,您可以使用字符串“use strict”。这可以针对整个脚本或在单个函数中完成。...使用严格模式的好处 严格模式以两种方式提供帮助: 它捕捉常见的编码错误和“不安全”的行为。 例如,变量必须用var、let或声明const。未声明的变量将导致错误。...在非严格模式下,将默认为浏览器上下文中的this全局对象。...严格模式可以使您的 JavaScript 代码更加健壮和可维护,最好的做法是使用“use strict”指令启动您的脚本。

15920
  • MySQL sql_mode的坑及严格模式详解

    mysql5.7默认启用这个模式,这个模式是指在mysql的select查询不能出现group by语句字段之外的其余字段。...不对日期做全面的检查,仅仅检查月份是否在1~12之间,天数是否在1~31之间;这种模式可能是有用的对web应用来说去获取年,月,日在三个不同的字段并且准确存储用户的输入数值,没有验证数据的合法性。...ERROR_FOR_DIVISION_BY_ZERO不是严格模式的一部分,应该和严格模式一起启用,默认是启用的。...NO_ZERO_DATE :这个模式影响着插入的’0000-00-00’值是否作为合法的数值,这个结果和是否启用严格模式有关。...NO_ZERO_IN_DATE :这个模式影响着日期中的月份和天数是否可以为0(注意年份是非0的),这个模式也取决于严格模式是否被启用。如果这个模式未启用,date中的零部分被允许并且插入没有警告。

    2.7K20

    数据库严格模式_mysql关系型数据库

    设置严格模式 为当前会话设置严格模式: 执行SET sql_mode = ‘STRICT_TRANS_TABLES’ 或者SET sql_mode = ‘STRICT_ALL_TABLES’。...或者在 MySQL 配置文件中配置以下内容,再重启: 设置非严格模式:SET sql_mode=” 。...查询当前的 SQL 模式 STRICT_TRANS_TABLES 和 STRICT_ALL_TABLES 的区别 唯一的区别是: 对于不支持事务的表,若开启 STRICT_TRANS_TABLES,MySQL...因为现在绝大部分用的 InnoDB 引擎,是支持事务的,所以基本不用关心这种区别。...严格模式和非严格模式的区别 严格模式下不能在无符号整数字段插入负值 严格模式下,无默认值的 not null 字段在插入数据时必须指定值 严格模式下,插入字符串不能超出定义长度 对于下表: 在非严格模式下执行

    1.8K20

    第 56 期:为什么不建议关闭 MySQL 严格模式?

    问题 处理一个 MySQL 报错。 ERROR 1292 (22007): Truncated incorrect DECIMAL value: '' 实验 1. 将问题丢给 ChatDBA。...可以在爱可生开源社区 B 站或视频号查看本期完整操作视频。 >> 左侧为流程分析画布,展示 ChatDBA 对此问题的排查逻辑;右侧为互动区域。 2....我们将相关信息输入到 ChatDBA 后,系统指出这是在进行数据更新时导致的问题,并提出在严格模式下该类转换存在的问题,强调通过 修改 SQL 语句来解决该问题。 什么是严格模式?...在第一次回答中,ChatDBA 提示我们可以通过暂时禁用严格模式解决该问题,但是该操作不推荐,这里面我们也问下 ChatDBA 来学习一下严格模式的具体定义。 3. 实验总结。...在 MySQL 5.7 中,对数据检查方面会比较严格,对 UPDATE 或 INSERT 场景中字段为 Decimal 数据类型的话,默认严格模式下无法与 '' 空字符串相比较,虽然能够关闭严格模式以确保问题

    12610

    『设计模式』HR问了我朋友什么是简单工厂模式,竟被质疑是否学过设计模式,是否是计算机专业?

    简单工厂模式 简单工厂模式也被称为静态工厂模式;使用简单工厂模式可以将产品的“消费”和生产完全分开,客户端只需要知道自己需要什么产品,如何来使用产品就可以了,具体的产品生产任务由具体的工厂类来实现。...{ @Override public void Method() { System.out.println("我是第一种产品,这是我的功能"); } } package 简单工厂模式;...写在最后: 我叫风骨散人,名字的意思是我多想可以不低头的自由生活,可现实却不是这样。...目前是一名在校大学生,预计考研,热爱编程,热爱技术,喜欢分享,知识无界,希望我的分享可以帮到你! 如果有什么想看的,可以私信我,如果在能力范围内,我会发布相应的博文! 感谢大家的阅读!?...你的点赞、收藏、关注是对我最大的鼓励!

    34130

    国产数据库兼容过程中涉及的MySQL非严格模式

    在国产数据库兼容适配过程中,经常遇到因源数据库是MySQL,迁移至其他国产数据库后,因MySQL端兼容模式有非严格模式,导致适配过程过程中需要做调整。...那么,MySQL主要的非严格模式小结如下: 1、非严格模式参数 MySQL的非严格模式指的是在MySQL配置中禁用严格模式(Strict Mode)的情况下执行的SQL。...简单举例 以下是一些非严格模式下可能出现的案例情况: 1) 非严格的日期和时间插入:在非严格模式下,MySQL允许插入不符合日期和时间格式的值,会自动进行转换或舍入 eg: 不合法的日期值'0000...-00-00'等 2) 非严格的字符串插入:在非严格模式下,MySQL允许插入过长的字符串,会自动截断超过字段长度的部分 (建议已开启此类严格模式) eg: varchar(2) 类型的字段,插入...例如可以将字符串'123' 插入int类型,结果是123;将'abc'插入int,结果是0 5) 非严格的分组查询:在非严格模式下,MySQL允许在GROUP BY查询中选择非聚合列,这可能导致不确定的结果

    36120

    MySQL-存储引擎-创建表-字段数据类型-严格模式-字段约束-键-02

    BLACKHOLE 引擎对应的本地化文件 案例 基本操作 创建表的完整语法 表记录基础操作 严格模式补充 查看数据库配置中变量名包含mode的配置参数 模糊匹配 基本数据类型 数据范围 整型 TINYINT...但在实际情况下,我们应该尽量减少数据库的操作,缓解数据库的压力,让它仅仅只管理数据即可,这样的情况下就需要设置严格模式 备注: 在 5.7 左右以后的MySQL版本中默认就是严格模式 查看数据库配置中变量名包含...mode的配置参数 show variables like "%mode%"; sql_mode 即sql严格模式 ?...mysql在存储char 类型字段的时候,硬盘上确确实实存的是固定长度的数据,但是再取出来的那一瞬间mysql 会自动将填充的空格去除 ?...可以通过严格模式来修改该机制,让其不自动做去除处理 # 如果不想让mysql帮你做自动去除末尾空格的操作,需要再添加一个模式 set global sql_mode="strict_trans_tables

    2.4K30

    mysql锁表和解锁语句_db2查看是否锁表

    锁是Mysql在服务器层和存储引擎层的的并发控制。 加锁是消耗资源的,锁的各种操作,包括获得锁、检测锁是否是否已解除、释放锁等。...只有执行计划真正使用了索引,才能使用行锁:即便在条件中使用了索引字段,但是否使用索引来检索数据是由 MySQL 通过判断不同执行计划的代价来决定的,如果 MySQL 认为全表扫描效率更高,比如对一些很小的表...(更多阅读:MySQL索引总结) 由于 MySQL 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然多个session是访问不同行的记录, 但是如果是使用相同的索引键, 是会出现锁冲突的(后使用这些索引的...MySQL 的恢复机制(复制其实就是在 Slave Mysql 不断做基于 BINLOG 的恢复)有以下特点: 一是 MySQL 的恢复是 SQL 语句级的,也就是重新执行 BINLOG 中的 SQL...死锁的解决办法和各种锁的情况查看 各种任务,锁,事务查看 查询任务列表 SELECT * FROM information_schema.processlist 主要查看: Command 是Query

    3.2K40

    mysql.ibd 文件解析 (sdi page) (非debug模式下查看隐藏系统表)

    但很多表在非debug模式下是无法查看里面的数据的. 这TM就很恼火. (刚学完innodb的磁盘结构, 我能受这气?). 所以我们现在来解析下mysql.ibd文件....(也顺便为 ibd2sql 2.0 做准备)分析我们先登录数据库, 随便查看张mysql库下面的表的DDLshow create table mysql.engine_cost;发现使用的表空间都是mysql...我们查看该表空间的路径:general tablespace 可以存储多个表select * from information_schema.files where TABLESPACE_NAME='mysql...有60张表但是我们登录数据库里面查看,却只有37张(root@127.0.0.1) [mysql]> select count(*) from information_schema.tables where...要开debug模式才能查询, 而我们本篇的目的就是直接查询.解析mysql.ibd文件既然得到了sdi信息, 那么就可以开始解析那60张表的数据了.

    73930

    MySQL双主模式下是如何避免数据回环冲突的

    a) 如果推送了,Master1是如何过滤,避免后续无限循环 b) 如果没有推送,Master2是如何过滤的 如果要理解这个过程,我们就需要模拟测试,查看数据流转过程中的binlog情况,可以参考这个流程...此时需要思考的是,在这个过程中偏移量是否发生了变化,从Master1产生的binlog到Master的relay log,如果通过mysqlbinlog去解析,得到的偏移量情况都是一模一样,而在Master2...其实看到这里,还存在一个问题,那就是在偏移量模式下,如果需要一个数据变更操作在Master2丢失了,那么是没有办法进行回溯的。...而基于GTID模式可以唯一性标识全局事务,那么哪怕对这个操作进行了重复应用,哪怕是DDL语句,操作的影响行数也是0. 我们对一个已经执行的操作进行再次应用,看看MySQL是否会自动舍弃该类操作。...所以基于此,我们也基本明确了数据回环解决方法的一个设计思想,那就是如何让MySQL能够识别出那些已经应用的事务数据,我想GTID是一个答案,而且分布式ID不用,这是MySQL内部的处理机制,而且是MySQL

    3K40

    MySQL中,一条语句是否会被binlog记录以及以什么样的模式记录

    翻译 MySQL 5.6 中,一条语句是否会被binlog记录以及以什么样的模式记录,主要取决于语句的类型(safe,unsafe, or binary injected),binlog格式(STATEMENT...二进制形式记录必须使用row模式。 各种引擎对于binlog format的支持 下面的表格展示了各种引擎对于binlog format的支持: ?...MySQL 5.6默认的binlog format是 STATEMENT。(注意MySQL !...哪些情况会记录成row模式 当binlog_format=MIXED的时候,如下情况下会自动将 binlog 的格式由 STATEMENT变为 ROW 模式: 当函数中包含 UUID() 时; 2 个及以上包含.../doc/refman/5.6/en/binary-log-mixed.html; 调用了mysql库中的log型table; 使用了 LOAD_FILE() 函数;

    2.4K90

    MySQL的sql_mode解析与设置和MySQLdb._exceptions.OperationalError: (1055, “Expression

    clause 方法1 查看及更改sql_model show VARIABLES like '%sql_mode%'; or mysql> select @@sql_mode; 更改sql_model...mysql:mysql -u root -p mysql ->select @@sql_mode; 验证sql_mode的值是否改变。...在非严格模式,可以接受该日期,但会生成警告。 NO_ZERO_DATE: 在严格模式,不要将 '0000-00-00’做为合法日期。你仍然可以用IGNORE选项插入零日期。...将当前数据库模式设置为ANSI模式: mysql> set @@sql_mode=ANSI; 2、TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入...将当前数据库模式设置为TRADITIONAL模式: mysql> set @@sql_mode=TRADITIONAL; 3、STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,

    1.2K10

    【MySQL】MySQL配置中sql_mode的作用

    sql_mode 根据官网的解释,MySQL 服务器是可以在不同的 SQL 模式中运行的,这个模式会影响 MySQL 支持的 SQL 语法及其执行的数据验证检查。...并且,MySQL 可以将这些模式分别运用于不同的客户端,也就是说,它是有 SESSION 会话设置能力的一个系统变量。 如何查看当前系统的 sql_mode 呢?和查看系统变量是一样的。...SQL模式,如果可能,也为非事务性存储引擎启用严格的SQL模式。...这里提到了一个严格模式的概念,严格模式控制 MySQL 如何处理 INSERT 或 UPDATE 等更改语句中的无效或缺失值,比如上面我们说过的日期和除零问题,如果没有 STRICT_TRANS_TABLES...在转移或升级到 MySQL8 之后,其实最常见的问题就是上面说过的日期问题,0格式日期这种形式其实是已经过时的方式了,也是不推荐的方式,所以在 MySQL8 中会默认在严格模式下禁用这种形式的日期存储,

    15310

    GROUP BY 后 SELECT 列的限制:which is not functionally dependent on columns in GROUP BY clause

    设置该选项后就与oracle操作类似,授权之前必须先建立用户 数据检查类    NO_ZERO_DATE 认为日期 ‘0000-00-00’ 非法,与是否设置后面的严格模式有关 1、如果设置了严格模式...是有自己的默认模式的;版本不同,默认模式也不同 -- 查看 MySQL 版本 SELECT VERSION(); -- 查看 sql_mode SELECT @@sql_mode; -- 设置宽松模式...和 MySQL5.7 默认的 sql_mode 模式参数是不一样的,5.6的mode是NO_ENGINE_SUBSTITUTION,其实表示的是一个空值,相当于没有什么模式设置,可以理解为宽松模式。...5.7的mode是STRICT_TRANS_TABLES,也就是严格模式。 重启mysql后永久生效。...为什么会有 ONLY_FULL_GROUP_BY 模式   虽然案例中,无论是“严格模式”,还是“宽松模式”,结果都是对的,那是因为 cno 与 cname 唯一对应的,如果 cno 与 cname 不是唯一对应

    3.2K50
    领券