MySQL关于sql_mode解析与设置讲解

yizhihongxing

MySQL 关于 sql_mode 解析与设置讲解

在讲解 sql_mode 之前,我们需要先了解什么是 SQL,以及 MySQL 又是什么。

SQL 是什么

SQL 是指结构化查询语言,在关系数据库管理系统中,被广泛用于数据库的管理与操作。常用的 SQL 语法有:SELECT、INSERT、UPDATE、DELETE,以及创建表、索引等相关的语法。

在我们使用 SQL 进行数据操作时,往往需要根据需求进行定制化的操作。而 sql_mode 则是 MySQL 数据库提供的用于定制化的工具。

MySQL 与 sql_mode

MySQL 是目前较为流行的开源数据库管理系统,支持存储、管理和检索各种数据,极大地方便了开发者在数据管理方面的工作。

sql_mode 则是 MySQL 中用于控制 SQL 语句的执行方式和行为的组合变量。通常,我们可以通过设置 sql_mode 来控制 MySQL 在执行 SQL 操作时的三个主要特性:

  • 数据检查(data values checking)
  • 数据处理(data handling)
  • 数据存储(data storage)

sql_mode 的设置

MySQL 提供了多种方式来设置 sql_mode,分别为:

  • 在启动 MySQL 处设置(适用于全局设置)
  • 对于特定的客户端对象或会话(适用于个别设置)

通常情况下,我们在 MySQL 的配置文件中设置 sql_mode 后,会影响全局的数据库操作。

在 MySQL 命令行界面下,可以使用以下命令获取当前的 sql_mode 配置:

SELECT @@GLOBAL.sql_mode, @@SESSION.sql_mode;

其中 @@GLOBAL.sql_mode 表示全局的 sql_mode 配置,而 @@SESSION.sql_mode 则表示当前会话(session)中的 sql_mode 配置。

sql_mode 的值

使用以下命令即可获取 MySQL 提供的所有 sql_mode 值:

SELECT @@sql_mode;

以下是 MySQL 中常用的 sql_mode 取值:

  • STRICT_TRANS_TABLES:启用严格模式,强制所有数据插入、更新为遵循 SQL 标准。
  • NO_ZERO_IN_DATE:禁止 '0000-00-00' 日期值。
  • NO_ZERO_DATE:禁止 '0000-00-00' 和 '0000-00-00 00:00:00' 日期时间值。
  • ERROR_FOR_DIVISION_BY_ZERO:在除零操作时抛出错误。
  • STRICT_ALL_TABLES:在插入错误或警告时禁止自动填充默认值。
  • TRADITIONAL:启用了严格模式、ERROR_FOR_DIVISION_BY_ZERO 和 NO_AUTO_CREATE_USER。

示例说明

我们可以通过以下示例说明 SQL 模式的作用:

示例一:

默认情况下,MySQL 允许插入空字符串('')到 INT 类型的字段中,但实际上它会被转换成 0。这在某些场景下会导致意外的问题。为了解决这个问题,我们可以设置 sql_mode,在执行 SQL 操作时强制检查值的类型。

-- 查看当前的 sql_mode
SELECT @@sql_mode;

-- 启用严格模式
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL';

-- 插入空字符串时会抛出错误
INSERT INTO `test` (`id`, `value`) VALUES (1, '');

示例二:

在默认情况下,MySQL 允许操作者在某些操作中使用 NULL,例如:

  • 对于数据类型中,当字段在未插入时,值就为NULL。
  • 在一个 AUTO_INCREMENT 字段中插入 NULL,会插入下一个自动增量值。

然而,这在某些场合下可能会被误用,例如存储日期时使用 NULL 值表示缺失。因此,我们可以通过设置 sql_mode,来禁止使用 NULL。

-- 查看当前的 sql_mode
SELECT @@sql_mode;

-- 启用只读模式
SET sql_mode = 'READ_ONLY';

-- 以下操作将会抛出错误
INSERT INTO `test` (`id`, `date`) VALUES (1, NULL);

UPDATE `test` SET `date` = NULL WHERE `id` = 1;

总结

sql_mode 作为 MySQL 非常重要的组合变量,可以为数据库操作者提供更加严格、规范的数据管理方式。因此,在进行 MySQL 数据库操作时,我们需要对他进行更加深入的了解和设置,以达到更好的数据管理效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL关于sql_mode解析与设置讲解 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • MySQL百万级数据分页查询优化方案

    MySQL百万级数据分页查询优化方案 当数据量变得越来越大时,如何优化查询分页的速度成为挑战。以下是优化MySQL百万级数据分页查询的完整攻略。 数据库设计方案 优化表结构,把一个表的数据拆成多个表,降低表的数据量; 使用分区表,对每个分区表进行分页查询; 使用缓存技术,将常用的数据缓存到内存中,减少查询数据库的次数。 ## SQL查询优化 合理设计SQL语…

    database 2023年5月19日
    00
  • 渗透测试信息收集之常用端口信息

    渗透测试信息收集之常用端口信息 在渗透测试的过程中,信息收集是至关重要的一步。其中,根据目标主机所开放的端口信息来推断其所运行的服务,是信息收集的一个重要环节。本文将讲述一些常见的端口信息收集攻略,以供参考。 常用端口信息查询 nmap 信息收集 nmap是一款常用的端口信息扫描工具。通过输入命令nmap -sS -sV -p- target_ip,nmap…

    database 2023年5月22日
    00
  • PostgreSQL数据库中如何保证LIKE语句的效率(推荐)

    要保证PostgreSQL数据库中LIKE语句的效率,可以采用以下方法: 创建索引 在数据库中,可以为某些列创建索引,可以大大提高查询的效率。对于含有LIKE查询的列,可以通过使用特殊的索引来提高查询速度。一个常用的索引类型是btree索引,它适用于匹配前缀比较短的列。但是,对于像通配符%、_等比较复杂的模式匹配,btree索引并不适用。 可以使用全文本搜索…

    database 2023年5月19日
    00
  • Mysql中Binlog3种格式的介绍与分析

    下面是关于Mysql中Binlog3种格式的介绍与分析的完整攻略。 1. 什么是Binlog Binlog是MySQL中的二进制日志(Binary Log)。 其记录了所有对数据库的更新操作,如增、删、改,而这些操作是以二进制的方式保存的,因此称之为二进制日志。 在数据恢复和数据复制中,二进制日志发挥着至关重要的作用。 Binlog根据具体的实现方式可分为三…

    database 2023年5月21日
    00
  • linux 常见的标识与Redis数据库详解

    Linux 常见的标识 文件权限标识 Linux系统中,每个文件都有自己的权限标识,包括文件所有者、文件所属组和文件其他用户的权限。其中,文件的权限标识用10位二进制数来表示,分为三组,每组用三位表示。具体如下: 文件所有者权限:读取(r)、写入(w)、执行(x),用 rwx 表示,分别对应二进制数值 4、2、1;文件所属组权限:读取(r)、写入(w)、执行…

    database 2023年5月22日
    00
  • PHP实现页面静态化的超简单方法

    下面我会为您详细讲解“PHP实现页面静态化的超简单方法”的完整攻略。这份攻略主要会涉及PHP文件缓存、文件读写等知识点,但是相信您只要按照下面的步骤操作,就一定能够顺利完成页面静态化的过程。 什么是页面静态化 页面静态化指的是,把动态页面变成静态页面,让用户访问静态页面,实现页面高效的访问和提升网站性能的目的。 实现页面静态化的方法 实现页面静态化的方法有很…

    database 2023年5月19日
    00
  • MySQL数据库超时设置配置的方法实例

    下面是MySQL数据库超时设置配置的方法实例的完整攻略。 背景 在MySQL数据库使用过程中,用户可能会出现连接超时的情况,如因为长时间无操作导致连接断开。因此,为避免超时影响正常使用,需要对MySQL超时时间进行配置。 步骤 本教程分为两部分,分别介绍MySQL超时配置的命令行和配置文件修改两种方式。 命令行配置超时时间 连接MySQL数据库,授权给需要修…

    database 2023年5月22日
    00
  • k8s部署canal-1.1.6版本实现MySQL数据库数据同步

    1、版本说明 软件&镜像 版本&镜像信息 说明 Kubernetes v1.23.7 k8s服务器 Kuboard v3.5.2.0 k8s连接管理工具 Canal v1.1.6 数据同步 Canal-deployer canal/canal-server:latest canal-deplyer镜像版本信息 Canal-adapter fu…

    MySQL 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部