sql_mode

作者: Ugfly | 来源:发表于2020-10-16 18:50 被阅读0次

    [TOC]

    sql_mode 设置为任意一种,就被成为严格模式。

    1. 严格模式

    1. STRICT_TRANS_TABLES
    2. STRICT_ALL_TABLES

    2. SQL 语句

    先创建两张测试用的表:
    create table test( id int(11) not null, col1 int(11) default null , primary key(id)) engine=Innodb default charset=utf8mb4;
    
    create table test1( id int(11) not null, col1 int(11) default null , primary key(id)) engine=Myisam default charset=utf8mb4;
    
    
    表结构查看:
    mysql> show create table test\G
    *************************** 1. row ***************************
           Table: test
    Create Table: CREATE TABLE `test` (
      `id` int(11) NOT NULL,
      `col1` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
    1 row in set (0.00 sec)
    
    mysql> show create table test1\G ·e
    *************************** 1. row ***************************
           Table: test1
    Create Table: CREATE TABLE `test1` (
      `id` int(11) NOT NULL,
      `col1` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4
    1 row in set (0.00 sec)
    
    设置严格模式:

    SET sql_mode='STRICT_TRANS_TABLES' 或者 SET sql_mod='STRICT_ALL_TABLES'

    3. 区别☆

    结果见图

    在不设置严格模式下,无论是 Innodb还是 Myisam都会在插入'a'到 int 类型的col1 字段时,不会报错且将'a'转换为 数字0。

    1. innodb 引擎:

      a. 在执行 insert 操作时,只要设置了严格模式任一种。无论插入单行还是多行,只要插入数据与字段类型不兼容,则 insert 操作失败并回滚。

    2. myisam 引擎:

      STRICT_TRANS_TABLES:

       不管是插入单行还是多行,如果某一行数据字段类型不匹配,则插入失败。否则成功。
      

      STRICT_ALL_TABLES

      1. 如果首条数据可以插入成功,则后面数据会将字符串'a'转换为 0 继续插入
      2. 如果首条数据插入失败,则后续数据都无法插入。
      
    image-20200920134119534.png

    相关文章

      网友评论

          本文标题:sql_mode

          本文链接:https://www.haomeiwen.com/subject/gphtmktx.html