MySQL sql_mode的使用详解

yizhihongxing

我们来讲解一下MySQL sql_mode的使用。

什么是MySQL sql_mode

MySQL sql_mode 是 MySQL 提供的一种配置,用于控制 MySQL 在执行 SQL 语句时的行为。它定义了一组规则,来判断 SQL 语句是否合法,以及如何处理 SQL 语句中的错误。

MySQL sql_mode 常见的取值

1. STRICT_TRANS_TABLES

  • 描述:在严格模式下,如果有任何非法数据插入到一个事务表中,就会报错并回滚事务。
  • 取值:STRICT_TRANS_TABLES 或者不指定。
  • 示例:创建一张名为 mytable 的表,包含一个整数类型的列 id 和一个字符串类型的列 name,同时设置 STRICT_TRANS_TABLES 模式。
    ```
    CREATE TABLE mytable (
    id INT NOT NULL,
    name VARCHAR(10) NOT NULL,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

SET sql_mode = 'STRICT_TRANS_TABLES';
INSERT INTO mytable (id, name) VALUES ('1', 'MySQL');
```

2. STRICT_ALL_TABLES

  • 描述:在严格模式下,所有插入到表中的非法数据都会报错。
  • 取值:STRICT_ALL_TABLES 或者不指定。
  • 示例:创建一张名为 mytable 的表,包含一个整数类型的列 id 和一个字符串类型的列 name,同时设置 STRICT_ALL_TABLES 模式。
    ```
    CREATE TABLE mytable (
    id INT NOT NULL,
    name VARCHAR(10) NOT NULL,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

SET sql_mode = 'STRICT_ALL_TABLES';
INSERT INTO mytable (id, name) VALUES ('1', 'MySQL');
```

3. ANSI_QUOTES

  • 描述:启用后,所有使用双引号的字符串被视为标识符,而不是字符串,因此必须使用反引号来转义标识符。
  • 取值:ANSI_QUOTES 或者不指定。
  • 示例:创建一个名为 "mytable" 的表,并设置 ANSI_QUOTES 模式。
    SET sql_mode = 'ANSI_QUOTES';
    CREATE TABLE "mytable" (
    "id" INT NOT NULL PRIMARY KEY,
    "name" VARCHAR(10) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

MySQL sql_mode 的设置方法

1. 设置全局 sql_mode

在 MySQL 配置文件 my.cnf 或者 my.ini 中,通过设置 sql_mode 的值来控制 MySQL 的 sql_mode 行为。例如:

[mysqld]
...
sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

设置完毕后,需要重启 MySQL 服务,才能生效。

2. 设置会话级别 sql_mode

使用以下 SQL 语句,来设置会话级别 sql_mode:

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

在这个会话中,所有的 SQL 语句都会遵循这个 sql_mode 规则。如果需要恢复原来的 sql_mode 值,可以使用以下命令:

SET sql_mode = '';

总结

MySQL sql_mode 可以帮助我们避免在 SQL 语句执行时遇到一些意料之外的坑,提高了数据的完整性。

推荐在开发过程中启用 sql_mode,尽量在生产环境中也开启,尤其对于重要数据的表格,例如账户、财务数据等,更应开启sql_mode来增强数据的安全性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL sql_mode的使用详解 - Python技术站

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

相关文章

  • springboot 2.x版本Redis设置JedisConnectionFactory

    一、 springboot2.x 集成redis时,配置连接信息和构造方法发生了改变。 2.X版本可以使用RedisStandaloneConfiguration、RedisSentinelConfiguration、RedisClusterConfiguration三种方式配置连接信息。 这里我们以RedisStandaloneConfiguration为…

    Redis 2023年4月13日
    00
  • Django在win10下的安装并创建工程

    下面是Django在Win10下的安装及创建工程的攻略: 安装Python 要安装Django,首先需要安装Python。在Windows下,可以到Python官网下载32位或64位的Python安装程序,然后运行安装程序按照提示进行安装。安装完成后,可以在命令行窗口中输入以下命令验证Python是否安装成功: python –version 如果显示出了…

    database 2023年5月22日
    00
  • Redis中对Hash类型的操作命令

      ——————————————————————– 1、对Hash类型的操作命令 1.1、hset:设置值。格式是:hset hash的key 项的key 项的值 操作如下: java示例代码: 1 import redis.clients.jedis.Jedis; 2…

    Redis 2023年4月12日
    00
  • DBMS中2NF和3NF的区别

    当我们设计一个关系型数据库的时候,需要将数据进行归一化,以避免数据的冗余和不一致性。常见的归一化形式包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF)等。这里,我将详细讲解DBMS中2NF和3NF的区别以及实例说明。 1. 什么是2NF和3NF? 2NF和3NF都是关系型数据库设计中的一种范式。具体来说,2NF和3NF通常是针对关系中的属性之间的…

    database 2023年3月27日
    00
  • Mysql中有关Datetime和Timestamp的使用总结

    Mysql中有关Datetime和Timestamp的使用总结 Datetime和Timestamp的概述 DateTime和Timestamp是Mysql中常用的两种日期/时间类型。 DateTime存储了日期和时间,可以保存的时间范围为 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’。 Timestamp也存储…

    database 2023年5月22日
    00
  • MySql安装步骤图文教程及中文乱码的解决方案

    下面是关于“MySql安装步骤图文教程及中文乱码的解决方案”的完整攻略,包含以下内容: 一、下载MySql安装包 访问MySql官网:https://www.mysql.com/ 进入下载页面:https://dev.mysql.com/downloads/mysql/ 选择合适的安装包进行下载,建议选择社区版(Community Edition) 示例说明…

    database 2023年5月22日
    00
  • Django中操作redis

    1.Django中操作redis  安装django-redis模块 1 pip3 install django-redis   在setting配置: 1 2 3 4 5 6 7 8 9 10 11 12 # reids_configure CACHES = {     “default”:{         “BACKEND”: “django_redi…

    Redis 2023年4月13日
    00
  • MySQL数据库大小写敏感的问题

    MySQL数据库大小写敏感的问题是一个常见的问题,下面是针对这个问题的一些攻略。 1. MySQL数据库大小写敏感的原因 MySQL数据库的表名、列名、索引名、触发器名、存储过程等标识符在创建时是否使用了引号会影响它们的大小写和是否敏感。使用引号时,标识符大小写敏感,不使用引号时,标识符大小写不敏感。 如果使用引号来定义标识符,MySQL将严格区分大小写,如…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部