在今天的文章中,我们将学习MySQL的严格SQL模式的后果,以及如何使用Navicat for MySQL 15查看和设置它。
Navicat for MySQL是一套管理和开发 MySQL 或 MariaDB 的理想解决方案。数据传输、数据同步和结构同步让你以低成本轻松快速地迁移数据。提供详细的指引,在各种数据库之间传输数据。比对和同步数据库的数据和结构。只需几秒钟就能设置和部署比对,并获得你要运行更改的详细脚本。
Navicat for MySQL最新试用版
第1部分:严格的SQL模式
当您不为非null列提供值时出现错误可能是造成挫败感的巨大根源。有一种方法可以通过为这些列设置默认值来最大程度地减少此类错误的发生。似乎很容易解决,但在所有方面,细节都是魔鬼。您必须小心,不要为了简化INSERT而向表中添加一堆通用且无用的数据。在今天的博客中,我们将学习MySQL的严格SQL模式的后果,以及如何使用Navicat for MySQL 15查看和设置它。在第2部分中,我们将介绍何时使用默认值(何时不使用默认值)。
严格的SQL模式和调整后的值
在MySQL中,您可以通过启用严格SQL模式来控制MySQL如何处理数据更改语句(例如INSERT或UPDATE)中的无效值或缺失值。当要插入的新行不包含其定义中没有显式DEFAULT子句的非NULL列的值时,缺少值。如果严格模式无效,MySQL 将为无效或缺失值插入调整后的值,并产生警告。调整值的示例包括一个空字符串,零和一个注册日期为00:00:00的时间戳记/日期。
很明显,调整后的值可能会破坏默认值的整个方面。因此,通常最好激活严格的SQL模式并在适当的地方提供默认值。在Navicat中,您可以在服务器监视器的“变量”选项卡上检查SQL模式的当前值。您可以在主菜单中的“工具”>“服务器监视器”下找到它。

如果存在STRICT_ALL_TABLES或STRICT_TRANS_TABLES,则启用严格SQL模式。在决定使用哪种格式时,请注意后者更为宽容,因为如果缺少值,MySQL会为列数据类型插入适当的调整值,并生成警告而不是错误。此外,语句的处理继续进行。同时,无效值被转换为最接近的有效值。
严格的SQL模式运行
让我们使用Sakila示例数据库将严格SQL模式与默认SQL模式进行比较。actor表不允许任何列中都为空,如“ 非空”标题下的复选框所示:

如果我们使用SET命令为当前会话禁用严格SQL模式,并执行仅提供last_name的INSERT,则数据库会接受它,但为first_name提供空字符串:

如果我们重新激活严格模式,则相同的INSERT现在会失败,并显示一条错误消息:

结论
在今天的文章中,我们了解了MySQL的严格SQL模式的后果,以及如何使用Navicat for MySQL 15对其进行查看和设置。在第2部分中,我们将介绍何时以及何时使用默认值没有意义。有想要购买正版授权的朋友,欢迎咨询客服了解详情>>
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!