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

mysql设置严格

基础概念

MySQL的严格模式(Strict Mode)是一组SQL模式,用于控制MySQL服务器在执行SQL语句时的行为。在严格模式下,MySQL会对数据类型、语法错误等进行更严格的检查,以确保数据的完整性和一致性。

相关优势

  1. 数据完整性:严格模式可以防止插入或更新不符合数据类型定义的数据,从而确保数据的准确性。
  2. 错误检查:严格模式会捕获更多的语法和逻辑错误,帮助开发者及时发现并修复问题。
  3. 一致性:严格模式有助于保持数据库的一致性,避免因数据类型不匹配等问题导致的意外行为。

类型

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:禁止插入或更新包含非法日期值的字段(例如,月份为13或日期为32)。
  5. ERROR_FOR_DIVISION_BY_ZERO:在执行除法运算时,如果除数为零,将产生错误而不是警告。

应用场景

严格模式适用于对数据完整性和准确性要求较高的应用场景,如金融系统、电子商务平台等。在这些场景中,确保数据的准确性和一致性至关重要。

如何设置

在MySQL中设置严格模式可以通过修改sql_mode系统变量来实现。以下是一些示例:

代码语言:txt
复制
-- 设置全局严格模式
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO';

-- 设置会话严格模式
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO';

遇到的问题及解决方法

问题1:在严格模式下,插入不符合数据类型的数据时,MySQL会报错并中止语句。

原因:严格模式对数据类型和值的约束更严格。

解决方法:检查插入的数据是否符合数据类型定义,并进行相应的修改。

问题2:在某些情况下,严格模式可能导致事务回滚,影响性能。

原因:严格模式下的错误检查可能导致更多的语句中止和事务回滚。

解决方法:根据应用需求调整严格模式的设置,或者在必要时禁用严格模式进行测试和调试。

参考链接

MySQL官方文档 - SQL Mode

请注意,以上链接可能会随着MySQL版本的更新而发生变化,建议在实际使用时查阅最新的官方文档。

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

相关·内容

Typescript 严格模式有多严格?

至今,前端 er 们基本都默认开启严格模式敲代码。 那么,你知道Typescript其实也有属于自己的严格模式吗? 1.Typescript严格模式规则 ?...当Typescript严格模式设置为on时,它将使用strict族下的严格类型规则对项目中的所有文件进行代码验证。规则是: 不允许变量或函数参数具有隐式any类型。...而在Typescript严格模式下,会出现以下报错: // Typescript 严格模式 function extractIds (list) { // ❌ ^^^^...这在Typescript严格模式下是会报错的: // Typescript 严格模式 function onChangeCheckbox (e) { // ❌...从这些严格模式规则,你就可以一窥当中的奥秘,今日开严格,他日 Bug 秒甩锅,噢耶。 参考资料 [1] 协变(covariance)和抗变(contravariance)是什么?

3K40
  • 严格模式

    1.什么是严格模式 JavaScript 除了提供正常模式外,还提供了严格模式(strict mode)。...ES5 的严格模式是采用具有限制性 JavaScript变体的一种方式,即在严格的条件下运行 JS 代码。 严格模式在 IE10 以上版本的浏览器中才会被支持,旧版本浏览器中会被忽略。...因此在使用时,我们可以将严格模式分为为脚本开启严格模式和为函数开启严格模式两种情况。...script标签未开启严格模式 情况二: 为函数开启严格模式 要给某个函数开启严格模式,需要把“use strict”; (或 'use strict'; ) 声明放在函数体所有语句之前...function fn(){   "use strict";   return "123"; } //当前fn函数开启了严格模式 3.严格模式中的变化 严格模式对 Javascript 的语法和行为

    1.4K20

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

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

    1.1K10

    严格模式

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

    98620

    严格模式

    1.严格模式 1.1什么是严格模式 JavaScript 除了提供正常模式外,还提供了严格模式(strict mode)。...ES5 的严格模式是采用具有限制性 JavaScript变体的一种方式,即在严格的条件下运行 JS 代码。 严格模式在 IE10 以上版本的浏览器中才会被支持,旧版本浏览器中会被忽略。...因此在使用时,我们可以将严格模式分为为脚本开启严格模式和为函数开启严格模式两种情况。...script标签未开启严格模式 情况二: 为函数开启严格模式 要给某个函数开启严格模式,需要把“use strict”; (或 'use strict'; ) 声明放在函数体所有语句之前...function fn(){   "use strict";   return "123"; } //当前fn函数开启了严格模式 1.3严格模式中的变化 严格模式对 Javascript 的语法和行为

    1.4K30

    MySQL sql_mode的坑及严格模式详解

    mysql可以为不同的客户端设置不同的sql_mode,并且每个应用能够设置他自己的会话级别的sql_mode。sql_mode会影响sql语法以及mysql显示数据的正确性。...mysql5.7默认启用这个模式,这个模式是指在mysql的select查询不能出现group by语句字段之外的其余字段。...(not a) between b and c;启用了HIGH_NOT_PRECEDENCE这个模式,就是启用来旧的优先级设置,表达式将被解析为后一种行为。...NO_ZERO_DATE不是严格模式的一部分,应该和严格模式一起被使用。因为NO_ZERO_DATE将会被放弃在将来的mysql中,它的影响将会被包含进严格模式中。...如果这个模式和严格模式被启用,则dates中的零部分不被允许并且插入产生错误,除非ignore也被使用。这个模式也不是严格模式的一部分,应该和严格模式一起被使用。

    3.9K20

    mysql乱码设置

    MySQL默认字符编码的设置 MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以UTF-8为例来说明  需要注意的是,要修改的地方非常多,相应的修改方法也很多...下面是一种最简单最彻底的方法:  一、Windows  1、中止MySQL服务  2、在MySQL的安装目录下找到my.ini,如果没有就把my-medium.ini复制为一个my.ini...即可  3、打开my.ini以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭  4、启动MySQL服务  二、Linux... 1、中止MySQL服务(bin/mysqladmin -u root shutdown)  2、在/etc/下找到my.cnf,如果没有就把MySQL的安装目录下的support-files...服务(bin/mysqld_safe &)  非常简单,这样的修改一劳永逸,今后MySQL一切相关的默认编码均为UTF-8了,创建新表格的时候无需再次设置  需要注意的是,当前数据库中已经存在的数据仍保留现有的编码方式

    5.6K60

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

    问题 处理一个 MySQL 报错。 ERROR 1292 (22007): Truncated incorrect DECIMAL value: '' 实验 1. 将问题丢给 ChatDBA。...为了进一步确定原因,ChatDBA 希望确认具体的 SQL 语句以及数据库设置等信息。...我们将相关信息输入到 ChatDBA 后,系统指出这是在进行数据更新时导致的问题,并提出在严格模式下该类转换存在的问题,强调通过 修改 SQL 语句来解决该问题。 什么是严格模式?...在第一次回答中,ChatDBA 提示我们可以通过暂时禁用严格模式解决该问题,但是该操作不推荐,这里面我们也问下 ChatDBA 来学习一下严格模式的具体定义。 3. 实验总结。...在 MySQL 5.7 中,对数据检查方面会比较严格,对 UPDATE 或 INSERT 场景中字段为 Decimal 数据类型的话,默认严格模式下无法与 '' 空字符串相比较,虽然能够关闭严格模式以确保问题

    66710

    JavaScript 严格模式

    严格模式对正常的 JavaScript 语义做了一些更改: 严格模式通过抛出错误来消除了一些原有静默错误; 严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷:有时候,相同的代码,严格模式可以比非严格模式下运行得更快...当打包文件时(多个文件打包成一个),你最好将所有的文件(打包之前的)都设置成严格模式或非严格模式,因为如果不这样做,打包后的文件可能并不是严格模式,可能会背离你的目的。...或者将严格模式定义在函数中,这样或许能避免模式冲突。 严格模式中的变化 首先看几个例子,在不使用严格模式下运行代码是什么结果,而使用了严格模式又是什么结果。 1....例如 Object.defineProperty 方法可以给对象的键设置一些属性,比如设置不可写属性: var obj1 = {}; Object.defineProperty(obj1, "x", {...这种表示八进制(普通模式下表示八进制),可以使用 0o21 表示八进制; 严格模式下禁止给基本类型设置属性(string,number,bigint,boolean,null,undefined,symbol

    1.5K10

    JavaScript 严格模式

    简介 ECMAScript 5 引入了严格模式(strict mode)的概念。严格模式为JavaScript定义了一种不同的解析与执行模型。...(JavaScript高级程序设计) 设立严格模式的目的: 严格模式会将JavaScript陷阱直接变成明显的错误。 严格模式修正了一些引擎难以优化的错误。...同样的代码有些时候严格模式会比非严格模式下更快。 严格模式禁用了一些有可能在未来版本中定义的语法。 开启严格模式 使用 ‘use strict’; 进入严格模式。...为整个script标签开启严格模式 // 整个语句都开启严格模式的语法 "use strict"; console.log('严格模式script') 注意: 如果要为整个script开启严格模式,‘use...参考链接 MDN严格模式 Javascript 严格模式详解

    1.6K30

    JavaScript严格模式

    use strict" 的目的是指定代码在严格条件下执行。严格模式下你不能使用未声明的变量。 严格模式声明 严格模式通过在脚本或函数的头部添加 "use strict"; 表达式来声明。...实例 严格模式使用标志,将"use strict"放在脚本文件的第一行,则整个脚本都将以"严格模式"运行。如果这行语句不在第一行,则无效,整个脚本以"正常模式"运行。..."use strict"; 严格模式调用有两种方式,       "use strict";     console.log("这是严格模式。")...严格模式对动态绑定做了一些限制。某些情况下,只允许静态绑定。也就是说,属性和方法到底归属哪个对象,在编译阶段就确定。...严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。

    2K50

    严格模式 – JavaScript

    不支持严格模式的浏览器与支持严格模式的浏览器行为上也不一样, 所以不要在未经严格模式特性测试情况下使用严格模式。严格模式可以与非严格模式共存,所以脚本可以逐渐的选择性加入严格模式。...试想合并一个严格模式的脚本和一个非严格模式的脚本:合并后的脚本代码看起来是严格模式。反之亦然:非严格合并严格看起来是非严格的。...合并均为严格模式的脚本或均为非严格模式的都没问题,只有在合并严格模式与非严格模式有可能有问题。建议按一个个函数去开启严格模式(至少在学习的过渡期要这样做)....语法错误 197 + 142; 第七,ECMAScript 6中的严格模式禁止设置primitive值的属性.不采用严格模式,设置属性将会简单忽略(no-op...抛出类型错误 } fun(1, 2); // 不会暴露v(或者a,或者b) 为未来的ECMAScript版本铺平道路 未来版本的ECMAScript很有可能会引入新语法,ECMAScript5中的严格模式就提早设置了一些限制来减轻之后版本改变产生的影响

    1.8K30
    领券