深入了解SQL模式

SQL 模式控制 MySQL / MariaDB DBMS 引擎(数据库管理系统)理解语法并验证为其处理的数据的方式。我们可以将其与具有不同规则集的游戏进行比较,每个玩家在玩之前都必须同意。

UNO 类比

让我们以UNO纸牌游戏为例。有很多变体,但我们可以这样总结:

变体 影响
双倍的 如果它们完全相同,每个玩家都可以同时放下几张牌
拦截 如果玩家的牌与刚刚放下的牌完全相同,他可以打出自己的牌,即使轮不到他
STRAIGHT_FLUSH 如果每个玩家按照数字顺序并且颜色相同,则可以同时放下多张牌

在开始玩之前,定义uno_mode=DOUBLE,INTERCEPTION,这意味着该 STRAIGHT_FLUSH规则不适用。如果此规则在游戏后期激活,可能会导致牌桌出现问题,一些玩家可能在前几轮中处于劣势,可能不想再玩了。

管理数据的纸牌游戏?

SQL 模式的工作原理是这样的,但它不是指定如何打牌,而是指定在某些情况下要做什么:

  • “2020-11-00”是有效日期(NO_ZERO_IN_DATE)吗?它更改了 DBMS 执行的数据验证。
  • 是SELECT name FROM users GROUP BY first_name有效的查询 ( ONLY_FULL_GROUP_BY) 吗?它更改了允许的语法。

当 MariaDB 10.2 和 MySQL 5.7 发布时,规则发生了变化:

数据库管理系统 默认 SQL_Mode
玛丽亚数据库 10.1 NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER
玛丽亚数据库 10.2 STRICT_TRANS_TABLES、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
MySQL 5.6 NO_ENGINE_SUBSTITUTION
MySQL 5.7 ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION

我们可以注意到,较新的版本保留了旧规则,但添加了新规则。这就是为什么当从 MariaDB 10.1 升级到 MariaDB 10.2 时,必须指定其数据库使用旧规则,而不是强制执行STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO.

具体来说

实际上,如果我的网站应该存储除法的结果,但分母是“0”,我的 MariaDB 10.1 默认 SQL 模式数据库的数据库将允许它并将结果存储为NULL. 我使用 MariaDB 10.2 默认 SQL 模式的数据库也将允许并存储一个NULL值,但会引发警告。如果还启用了严格模式,MariaDB 10.2 将抛出错误并且不存储任何内容。因此,更改 SQL 模式可能会破坏网站,因此应谨慎操作。

由于我们无法检查每个客户的每个网站的每一行代码,当计划进行更改默认 SQL 模式的 DBMS 重大升级时,会激活旧 SQL 模式,以确保您的网站不会受到影响。当然,您可以在 CloudDB 的“配置”选项卡中切换到新的默认 SQL 模式。但请记住,这适用于有经验的用户,建议坚持使用默认的 sql_mode,除非您的数据库是从具有不同默认 sql_mode 的先前版本升级的。

文章链接: https://www.mfisp.com/6047.html

文章标题:深入了解SQL模式

文章版权:梦飞科技所发布的内容,部分为原创文章,转载请注明来源,网络转载文章如有侵权请联系我们!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
IDC云库

通过托管DBaaS服务提高敏捷性和效率

2022-4-22 15:30:21

IDC云库

如何在新网站中使用SEO

2022-4-22 16:02:57

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
客户经理
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索

梦飞科技 - 最新云主机促销服务器租用优惠