首页
学习
活动
专区
圈层
工具
发布

mysql 严谨模式

MySQL 严谨模式基础概念

MySQL的严谨模式(Strict Mode)是一种配置选项,它使得MySQL在执行SQL语句时更加严格地遵循SQL标准。在严谨模式下,MySQL会对某些不符合标准的操作进行限制或报错,从而保证数据的完整性和一致性。

严谨模式的优势

  1. 数据完整性:通过限制一些可能破坏数据完整性的操作,如插入非法数据、更新不存在的记录等,确保数据的准确性。
  2. 错误预防:在数据输入或更新阶段就捕获并报告潜在的错误,避免在后续处理中出现更严重的问题。
  3. 标准化执行:确保MySQL的行为更符合SQL标准,便于跨数据库平台的迁移和维护。

严谨模式的类型

MySQL的严谨模式主要通过设置sql_mode系统变量来实现。常见的严谨模式配置包括:

  • ONLY_FULL_GROUP_BY:要求在使用GROUP BY子句时,SELECT列表中的所有列都必须在GROUP BY子句中出现。
  • STRICT_TRANS_TABLES:在事务表中,如果插入的值无效,则中断当前事务。
  • NO_ZERO_IN_DATENO_ZERO_DATE:禁止插入零日期或零时间戳。
  • ERROR_FOR_DIVISION_BY_ZERO:对除数为零的情况抛出错误,而不是返回NULL。

严谨模式的应用场景

  1. 金融系统:金融系统对数据的准确性和完整性要求极高,严谨模式可以确保数据的正确处理。
  2. 电商系统:电商系统中涉及大量的订单和库存管理,严谨模式有助于防止因数据错误导致的业务问题。
  3. 数据分析平台:在数据分析过程中,需要确保数据的准确性和一致性,以便得出可靠的结论。

遇到的问题及解决方法

问题1:在启用严谨模式后,某些SQL语句无法执行

原因:可能是由于SQL语句本身存在问题,或者与严谨模式的某些限制冲突。

解决方法

  1. 检查SQL语句是否符合SQL标准。
  2. 根据严谨模式的限制,调整SQL语句或数据结构。
  3. 如果必要,可以暂时禁用严谨模式进行调试,但务必在生产环境中重新启用。

问题2:在启用严谨模式后,插入非法数据时报错

原因:插入的数据违反了严谨模式的某些限制。

解决方法

  1. 检查插入的数据是否符合表结构和严谨模式的限制。
  2. 对数据进行预处理,确保其合法性。
  3. 如果数据确实需要包含非法值,可以考虑修改表结构或禁用相关限制(需谨慎评估风险)。

示例代码

以下是一个简单的示例,展示如何在MySQL中启用和禁用严谨模式:

代码语言:txt
复制
-- 启用严谨模式
SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO';

-- 禁用严谨模式(恢复默认设置)
SET GLOBAL sql_mode = '';

更多关于MySQL严谨模式的信息,可以参考MySQL官方文档或相关教程。

参考链接

MySQL官方文档 - SQL Mode

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

相关·内容

  • 学数学,要“直觉”还是要“严谨”?

    我们发现一些应该成立的结论是直觉,能不能够构建逻辑体系来完备地说明,是严谨。 那作为数学的学习和科学素养的培养,是直觉重要还是严谨重要呢?它们分别有什么特点? 什么是数学直觉和严谨? 首先看直觉。...它们虽然没有数学符号化的严谨,但是口口相传,一直没出问题,在不要求那么严谨的日常生活中,反而是最可行的方法。 那严谨的数学来看,排列是什么呢?其实所谓的排列,在数学上可以有两种结构来表达。...这便是严谨的数理逻辑给人类的伟大贡献。...这等严谨的逻辑正是数理逻辑,只有是非,没有对错和优劣,这个世界的思考足够纯粹和安全。...世界上哪有什么直觉和灵感,都是热爱基础上的千锤百炼,至于严谨到数学的级别,那是自然而然的产物。 共勉。

    1.4K10

    再谈“炼金术”:可以使用不严谨的方法,但拒绝不严谨的评估方法

    完善模式 这是类比推理。我们注意到图中不完整的模式,推断出一些节点只能在完善了模式后才存在。...值得注意的是,这种“模式完善”在贝叶斯世界之外也发生了,例如双向卷积RNN或PixelGAN自动编码器。 ? 每一种创新模式在构建知识和进步的过程中都至关重要的。...可以使用不严谨的方法 但不能使用不严谨的评估方法 就我而言,我也习惯了使用不严谨的方法,或者理论框架不完善或不存在的方法。但是, 任何人都不应该对那些评价体系不严谨的论文感到满意。...理论一旦出现,就不应该抵制它 我同意Yann的观点,在找到理论支持或严谨的分析之前,先开始采用技术是有好处的。然而问题在于,找到了理论支持之后,基于经验表现的推理往往还会胜过严谨性。...严谨不是关于学习理论、收敛保证、界限或定理证明的。无论我们是否已经完全开发出用于分析的数学工具,知识的严密性是所有机器学习的准则。 严谨性意味着周密、详尽、细致。

    79250

    DBA生存指南:以严谨防范事故

    如果大家对类似的问题感兴趣,我甚至总结了一个页面,供大家参考: http://www.eygle.com/blog/special/oracle_recovery.html 然而我想重复的,DBA至关重要的一项素质是:严谨...以上提及的问题,一步走错,就可能为生产数据库带来灾难,企业一方面我们可以通过加强规范来防范错误,一方面可以通过技术手段去防止问题(比如在一定程度上禁用DDL),而DBA们在进行一个操作之前,一定要足够严谨...在2016年,我们祝愿所有的DBA们能够更加严谨顺利,更上一层楼。...第四,兄弟越多越好 富有戏剧性效果的案例,说出一个心酸的真实故事,但愿我们都不要通过跌倒去收获经验,而是通过严谨去防止错误吧。...业务架构 电子渠道(网络销售)分析系统、数据治理 IT基础架构 分布式存储解决方案 数据架构 Oracle DB2 MySQL NoSQL 专项服务:架构/安全/容灾/优化/整合/升级/迁移 运维服务:

    1.2K60

    你的手写 new 实现足够严谨吗?

    console.log(Object.getPrototypeOf(obj2)) 如果不一样,那么可能说明你的 myNew 方法和标准的 new 操作之间存在着些许出入,这篇文章也许能够让你的方法更加完善 / 严谨...实现一个更严谨的 new 在大部分的手写 new 实现中,通常都没有去检查构造函数的原型是否是一个对象。...所以,如果想实现一个更加严谨的 new,那么就不应该在内部去调用 Object.create 方法,而应该选择手动创建一个对象并和构造函数建立原型关系,同时,我们还应该加入对构造函数原型的类型判断,看它到底是不是一个对象...现在我们实现的 new 就更加严谨了,而且也更接近原生的 new 操作。 本文到这里就结束了。不过,从语言设计的角度来说,为什么不将实例的 __proto__ 也跟着设置为 null 呢?

    90310

    MySQL SQL模式特点汇总

    前言 MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于sql_mode系统变量的值。...DBA可以设置全局SQL模式以匹配站点服务器操作要求,并且每个应用程序可以将其会话SQL模式设置为其自己的要求。 模式会影响MySQL支持的SQL语法以及它执行的数据验证检查。...这使得在不同环境中使用MySQL以及将MySQL与其他数据库服务器一起使用变得更加容易。...详情请参考 https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-important 严格SQL模式 MySQL服务器可以在不同的...SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于sql_mode系统变量的值。

    1.4K20

    介绍一种比.md呈现形式丰富,格式更严谨,展现内容更多的信息架构模式

    MVM:一种面向内容呈现的文件架构模式——写一次,渲染无限GitHub:https://github.com/anatomy1602/mvmfile纯Python实现,零前端框架依赖,.mvm文件本身不包含任何...heading:什么是MVMformat:paragraphimage:https://picsum.photos/800/300body:|MVM=Model-View-Msg一种面向内容呈现的文件架构模式...渲染效果同一份.mvm文件,四种渲染输出:1.交互式网页(InteractiveWebRenderer)左侧目录导航+搜索Tab切换、手风琴折叠、时间线、闪卡翻转、选择题测验、渐进式揭示暗色模式切换响应式布局所有交互由渲染器注入.../my-plugins/#暗色模式pythonmvm_cli.pyrenderdemo.mvm-rinteractive--dark-odark.html和现有方案的对比vsPPTPPTMVM内容与样式混在一起完全分离换风格逐页修改或重新套模板换渲染器多格式输出仅

    51830

    SQL优化,需要多一些严谨的态度

    在知识累积不够或是考虑不周的情况下,有时就会表现出严谨度不够、方法欠佳等问题,更有甚者还可能得出一些错误的结论。所以有时候知道的越多反而越不敢写。...下面就列举一些例子(有些例子是网友提供,表示感谢): case1(来自某用户组):改写建议,严谨不足 原SQL: TO_CHAR(a.VERI_DATE,'yyyymmdd') = :B1...一秒钟可能发生很多事情. case2(来自某用户组):改写建议,严谨不足 原SQL:TO_CHAR(remote_date,'yyyymmdd') between '20171201' and...yyyymmdd') and to_date('20171231','yyyymmdd') 这个改写把20171231这一天只取了00:00:00有一个时间点,剩下的23小时59分59秒都丢掉了,这个改写就太不严谨了...类似的不严谨文章还有很多:改写不等价,得出错误结论,优化不到位等.SQL改写需谨慎,得出结论需严谨.

    52710

    MySQL GTID的管理模式

    这是学习笔记的第 1973 篇文章 从MySQL 5.6.5 开始新增了一种基于 GTID 的复制方式。通过 GTID 保证了每个在主库上提交的事务在集群中有一个唯一的ID。...一个是create table xxx as select 的模式;另外一个是临时表相关的,我们就来简单说说这两个场景。...create table xxxx like data_mgr; insert into xxxx select *from data_mgr; 2)临时表的限制和建议 使用GTID复制模式时,不支持create...是一个内存值,而这个问题在5.7中通过表mysql.gtid_executed把这个值持久化来得以解决,也就意味着log_slave_updates是一个可选项。...此外,引入该解决方案之后又带来了新的问题,那就是在gtid_executed里面的数据会越来越多,如何精简管理呢,MySQL引入了一个新的线程和参数来进行管理。

    1.7K50

    mysql的sql_mode模式

    时不给这个字段赋值,比如下面这样: 表t_test(id,name)中id,name都不允许为空, insert into t_test(name) values('xxx') 必然报错,这是天经地义的事情,但是在mysql...中这是有可能成功,具体取决于sql_mode的设置 大概上讲,sql_mode可以分为二大类: 一类是所谓的宽松无敌模式(my.ini中sql_mode设置为空或仅NO_ENGINE_SUBSTITUTION...), 这种模式下,not null 的字段,在insert或update时不设置值也能成功,db在插入时,会自动给默认值,比如int会给0值,甚至可以把abc赋值给int型的字段(当然,db会自动忽略该值...,变成默认值0) 另一类的是所谓的严格模式(具体有很多可选值),设置成严格模式后,mysql就跟传统的oracle、sqlserver表现一致了,这也是我个人强烈推荐的模式。...最后,无耻的从网上抄一段贴在这里备份: 如果使用mysql,为了继续保留大家使用oracle的习惯,可以对mysql的sql_mode设置如下: 在my.cnf添加如下配置 [mysqld] sql_mode

    1.5K60
    领券