MySQL运维实战(4.8) SQL_MODE之NO_ENGINE_SUBSTITUTION

俊达3年前技术文章1713

开启NO_ENGINE_SUBSTITUTION,建表时如果指定的存储引擎不可用或不存在,SQL报错。否则会使用默认的存储引擎替换。



如果不设置NO_ENGINE_SUBSTITUTION,建表时指定的存储引擎不存在,则MySQL会使用默认的存储引擎替换

mysql> set sql_mode='';
Query OK, 0 rows affected (0.00 sec)

mysql> create table t1(a int) engine=abc;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> show warnings;
+---------+------+--------------------------------------------+
| Level   | Code | Message                                    |
+---------+------+--------------------------------------------+
| Warning | 1286 | Unknown storage engine 'abc'               |
| Warning | 1266 | Using storage engine InnoDB for table 't1' |
+---------+------+--------------------------------------------+
2 rows in set (0.00 sec)



如果设置了NO_ENGINE_SUBSTITUTION,建表时指定的存储引擎不存在,则会报错,无法创建表。

mysql> set sql_mode='NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected (0.01 sec)

mysql> create table t1(a int) engine=abc;
ERROR 1286 (42000): Unknown storage engine 'abc'



建议SQL_MODE设置NO_ENGINE_SUBSTITUTION,可以尽早发现问题。避免表使用了不符合要求的存储引擎。

相关文章

MySQL运维实战(4.7) SQL_MODE之ANSI_QUOTES

默认情况下,mysql使用反引号(`)作为标识符的引号。使用mysql关键字作为表名、字段名会报语法错误,这时可以加上反引号( `),避免报错。设置ANSI_QUOTES后,使用双引号(")...

MySQL运维实战(3.3) 管理数据库(database)

数据库使用create database语句创建数据库。创建数据库的账号需要有create权限。创建数据库用户拥有create权限才能创建数据库。-- 例子:创建dba用户,拥有创建数据库名...

MySQL运维实战(4.6) SQL_MODE之NO_BACKSLASH_ESCAPES

设置NO_BACKSLASH_ESCAPES后,反斜杠(\)不作为转义符。不设置NO_BACKSLASH_ESCAPES时,反斜杠(\)用来转义后一个字符mysql> create&n...

MySQL优化器特性(一)IN和Exists(semijoin)子查询优化策略

这篇文章中的SQL和执行计划在mysql 8.0.31环境下进行测试。测试的表结构和数据:表结构mysql> show create table tp\G...

MySQL运维实战(4.5) SQL_MODE之NO_ZERO_DATE和NO_ZERO_IN_DATE

NO_ZERO_DATE:日期中不允许'0000-00-00'NO_ZERO_IN_DATE:日期中年、月或日不允许为0,如不允许'2021-00-01', '...

MySQL运维实战(5.2) MySQL charset基本概念

mysql多字符集mysql支持多字符集。一个数据库中可以存储不同字符集的数据,一个表的不同字段可以使用不同的字符集。mysql> show character s...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。