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

mysql 如何开启严格模式

MySQL的严格模式是一种配置选项,它可以帮助开发者编写更规范的SQL语句,并避免一些常见的错误。以下是关于MySQL严格模式的基础概念、优势、类型、应用场景以及如何开启和遇到的问题和解决方法。

基础概念

MySQL的严格模式是一组SQL模式(SQL Modes)的组合,这些模式定义了服务器在执行SQL语句时的行为。严格模式主要用于确保数据的完整性和一致性。

优势

  1. 数据完整性:严格模式可以防止插入或更新不符合表定义的数据。
  2. 错误检测:它可以更早地检测到潜在的错误,从而减少后期维护的成本。
  3. 规范SQL编写:它鼓励开发者编写更规范、更标准的SQL语句。

类型

MySQL的严格模式主要包括以下几种:

  1. STRICT_TRANS_TABLES:在这种模式下,如果插入或更新操作违反了非空约束、唯一约束或检查约束,MySQL将中止当前事务。
  2. STRICT_ALL_TABLES:与STRICT_TRANS_TABLES类似,但适用于所有表,包括临时表。
  3. NO_ZERO_DATE:禁止插入零日期值('0000-00-00')。
  4. NO_ZERO_IN_DATE:禁止插入月份或日期为零的值(如'2020-00-01'或'2020-01-00')。

应用场景

严格模式适用于需要确保数据完整性和一致性的应用场景,如金融系统、电商系统等。

如何开启

你可以通过修改MySQL的配置文件(通常是my.cnfmy.ini)来开启严格模式。在[mysqld]部分添加以下配置:

代码语言:txt
复制
[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

然后重启MySQL服务使配置生效。

或者,你也可以在当前会话中动态开启严格模式:

代码语言:txt
复制
SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

或者针对当前会话:

代码语言:txt
复制
SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITRIPTON';

遇到的问题和解决方法

  1. 插入或更新失败:由于严格模式的限制,某些不符合规范的数据插入或更新操作可能会失败。解决方法是检查并修正数据,确保其符合表定义。
  2. 性能影响:严格模式可能会增加一些额外的检查,从而影响性能。解决方法是权衡数据完整性和性能需求,选择合适的SQL模式组合。
  3. 兼容性问题:某些旧的应用程序可能不兼容严格模式。解决方法是逐步迁移应用程序,或者在必要时暂时禁用严格模式。

参考链接

请注意,开启严格模式后,务必仔细测试应用程序以确保其正常运行。

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

相关·内容

严格模式

比如一些保留字如:class,enum,export, extends, import, super 不能做变量名 2.开启严格模式 严格模式可以应用到整个脚本或个别函数中。...因此在使用时,我们可以将严格模式分为为脚本开启严格模式和为函数开启严格模式两种情况。...情况一 :为脚本开启严格模式 为整个脚本文件开启严格模式,需要在所有语句之前放一个特定语句"use strict" ;(或'use strict' ;)。...script标签未开启严格模式 情况二: 为函数开启严格模式 要给某个函数开启严格模式,需要把“use strict”; (或 'use strict'; ) 声明放在函数体所有语句之前...function fn(){   "use strict";   return "123"; } //当前fn函数开启了严格模式 3.严格模式中的变化 严格模式对 Javascript 的语法和行为

1.4K20

严格模式

JS的严格模式采用具有限制性javascript变体的一种方式,即在严格的条件下运行js代码。 严格模式对正常模式做了如下更改 消除了js语法的不合理、不严谨之处、减少了一些怪异行为。...如正常模式变量不声明可以直接赋值 消除代码运行的一些不安全之处,保证代码运行安全。...提高编译器效率,增加运行速度 禁用了未来版本的一些语法如class、export、extends、import不能作为变量名 开启严格模式 严格模式可在整个脚本,或者某个函数开启 脚本严格模式 代码最前面..."use strict" //或者 (function(){ "use strict" }) 函数严格模式 function test(){ "use strict" } 主要变化 变量必须声明在赋值...严禁删除已经声明的变量 如delete 变量 严格模式下全局作用域中的函数中的this是undefined new实例化的构造函数指向创建对象的实例 定时器this还是指向window 函数里面的参数不允许重名

97020
  • 严格模式

    比如一些保留字如:class,enum,export, extends, import, super 不能做变量名 1.2开启严格模式 严格模式可以应用到整个脚本或个别函数中。...因此在使用时,我们可以将严格模式分为为脚本开启严格模式和为函数开启严格模式两种情况。...情况一 :为脚本开启严格模式 有的 script 脚本是严格模式,有的 script 脚本是正常模式,这样不利于文件合并,所以可以将整个脚本文件放在一个立即执行的匿名函数之中。...script标签未开启严格模式 情况二: 为函数开启严格模式 要给某个函数开启严格模式,需要把“use strict”; (或 'use strict'; ) 声明放在函数体所有语句之前...function fn(){   "use strict";   return "123"; } //当前fn函数开启了严格模式 1.3严格模式中的变化 严格模式对 Javascript 的语法和行为

    1.3K30

    JavaScript严格模式

    use strict" 的目的是指定代码在严格条件下执行。严格模式下你不能使用未声明的变量。 严格模式声明 严格模式通过在脚本或函数的头部添加 "use strict"; 表达式来声明。...实例 严格模式使用标志,将"use strict"放在脚本文件的第一行,则整个脚本都将以"严格模式"运行。如果这行语句不在第一行,则无效,整个脚本以"正常模式"运行。..."use strict"; 严格模式调用有两种方式,       "use strict";     console.log("这是严格模式。")...严格模式创设了第三种作用域:eval作用域。 正常模式下,eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。...严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。

    2K50

    JavaScript 严格模式

    (JavaScript高级程序设计) 设立严格模式的目的: 严格模式会将JavaScript陷阱直接变成明显的错误。 严格模式修正了一些引擎难以优化的错误。...同样的代码有些时候严格模式会比非严格模式下更快。 严格模式禁用了一些有可能在未来版本中定义的语法。 开启严格模式 使用 ‘use strict’; 进入严格模式。...为整个script标签开启严格模式 // 整个语句都开启严格模式的语法 "use strict"; console.log('严格模式script') 注意: 如果要为整个script开启严格模式,‘use...为某个函数开启严格模式 function strict() { "use strict";   return "严格模式函数"; } function notStrict() {...所以对于一个开启严格模式的函数,指定的this不再被封装为对象,而且如果没有指定this的话它值是undefined。

    1.6K30

    严格模式 – JavaScript

    有时,你会看到符合规范的、非严格模式被称为”懒散模式”,这不是官方术语,但你应该注意到它 开启严格模式EDIT 严格模式可以应用到整个script标签或个别函数中。...为某个script标签开启严格模式 为整个script标签开启严格模式, 需要在所有语句之前放一个特定语句 “use strict”; (或 ‘use strict’;) // 整个语句都开启严格模式的语法...合并均为严格模式的脚本或均为非严格模式的都没问题,只有在合并严格模式与非严格模式有可能有问题。建议按一个个函数去开启严格模式(至少在学习的过渡期要这样做)....为某个函数开启严格模式 同样的,要给某个函数开启严格模式,得把 “use strict”; (或 ‘use strict’; )声明一字不漏地放在函数体所有语句之前。...做一些在严格模式下发生的小改动,要求用户提交的JavaScript开启严格模式并且用特定的方式调用,就会大大减少在执行时进行检查的必要。

    1.8K30

    使用 TypeScript“严格”模式进行类型严格编码

    一些背景信息,我在 C 和 C++ 方面有丰富的经验,这些语言通常是类型严格的。但是,当考虑到我花费大量时间开发网站等项目时,我从未真正使用过 TypeScript 或其严格模式。...在 TypeScript 中工作是一次有趣的经历,严格模式让我想起了在 VS 中使用 C/C++ 的感觉。无论如何,这是我在解决这个问题时经历的过程。...工作流程幸运的是,这个问题本身给了我一个直接链接到严格模式文档的链接。我浏览了一下,过了一遍启用和维护严格模式代码库的一些检查和要求,然后很快就开始工作了。...我浏览了包含 Blockly 插件的文件夹,并直接进入了其 tsconfig.json 文件以启用严格模式,非常简单。...这样做之后,我运行了 npm run build,显示了许多由于严格模式类型检查而需要修复的错误。

    1.1K10
    领券