文档章节

mysql 的 NO_ENGINE_SUBSTITUTION

xxj123gogo
 xxj123gogo
发布于 2017/08/23 16:46
字数 650
阅读 17
收藏 0
点赞 0
评论 0

今天松问了一个问题, NO_ENGINE_SUBSTITUTION 是干啥的,这个还真没注意过以前。

研究了一下,原来这个是在创建表指定engine子句的时候,让mysql对此DDL做判断用的。看一个例子:

mysql> show variables like '%sql_mode%'; 
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| sql_mode      | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+
1 row in set (0.01 sec)

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | CSV storage engine                                                         | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears)             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                                      | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                                     | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                             | NULL         | NULL | NULL       |
| InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

mysql> use test ;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> create table t_e (it int ) engine=FEDERATE1;
ERROR 1286 (42000): Unknown storage engine 'FEDERATE1'  #FEDERATE1引擎不存在,直接报错。

当前 sql_mode="NO_ENGINE_SUBSTITUTION",表示不进行引擎替换。就是说,如果DDL的engine子句指定的引擎不存在,直接报错。

再看下面的例子。

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

mysql> create table t_e (it int ) engine=FEDERATE1;
Query OK, 0 rows affected, 2 warnings (0.04 sec)


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

mysql> show create table t_e;
+-------+-----------------------------------------------------------------------------------------+
| Table | Create Table                                                                            |
+-------+-----------------------------------------------------------------------------------------+
| t_e   | CREATE TABLE `t_e` (
  `it` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-----------------------------------------------------------------------------------------+
#引擎已被替换成InnoDB

去掉 NO_ENGINE_SUBSTITUTION ,此时,依然指定一个不存在的引擎,mysql自动将引擎替换成默认的innodb引擎。

去掉 NO_ENGINE_SUBSTITUTION ,对于alter操作的行为是:alter操作并不成功。

mysql> show create table t_e;
+-------+-----------------------------------------------------------------------------------------+
| Table | Create Table                                                                            |
+-------+-----------------------------------------------------------------------------------------+
| t_e   | CREATE TABLE `t_e` (
  `it` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+-----------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
#以前是MyISAM引擎。

mysql> alter table t_e engine=FEDERATE1;  #修改成不存在的FEDERATE1引擎
Query OK, 0 rows affected, 1 warning (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 1

mysql> show warnings ;                  
+---------+------+------------------------------------+
| Level   | Code | Message                            |
+---------+------+------------------------------------+
| Warning | 1286 | Unknown storage engine 'FEDERATE1' |
+---------+------+------------------------------------+
1 row in set (0.00 sec)

mysql> show create table t_e;           
+-------+-----------------------------------------------------------------------------------------+
| Table | Create Table                                                                            |
+-------+-----------------------------------------------------------------------------------------+
| t_e   | CREATE TABLE `t_e` (
  `it` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 | #引擎并没修改。
+-------+-----------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

如下是官网解释:

 NO_ENGINE_SUBSTITUTION

Control automatic substitution of the default storage engine when a statement such as CREATE TABLE or ALTER TABLE specifies a storage engine that is disabled or not compiled in.

The default SQL mode includes NO_ENGINE_SUBSTITUTION.

Because storage engines can be pluggable at runtime, unavailable engines are treated the same way:

With NO_ENGINE_SUBSTITUTION disabled, for CREATE TABLE the default engine is used and a warning occurs if the desired engine is unavailable. For ALTER TABLE, a warning occurs and the table is not altered.

With NO_ENGINE_SUBSTITUTION enabled, an error occurs and the table is not created or altered if the desired engine is unavailable.

© 著作权归作者所有

共有 人打赏支持
xxj123gogo
粉丝 0
博文 47
码字总数 64721
作品 0
其它
程序员
STRICT_TRANS_TABLES(存储引擎启用严格模式,非法数据值被拒绝)。

MySQL 1364 错误提示:#1364 - Field "details" doesn't have a default value。大概意思是:details字段没有默认的数值;也就是说我们没有为其分配数值,而表中此字段也没有设置默认值。这是...

fzxu_05 ⋅ 2015/09/25 ⋅ 0

MySQL的sql_mode模式

MySQL 5.0 以上版本支持三种sqlmode模式:ANSI、TRADITIONAL和STRICTTRANS_TABLES。 ANSI ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报...

运维的名义 ⋅ 01/23 ⋅ 0

mysql遇见Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题

Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘sss.month_id’ which is not functionally dependent on columns in GROUP BY clause; thi......

啃不动地大坚果 ⋅ 03/07 ⋅ 0

导入数据的时候,MYSQL 报错:Data too long for column

ERROR 1406 (22001): Data too long for column 解决方法 导入数据的时候,MYSQL 报错:Data too long for column 解决办法: 在my.ini里找到 sql-mode=”STRICTTRANSTABLES,NOAUTOCREATEUSER,......

雍雍_yoyo ⋅ 2015/02/10 ⋅ 0

ubuntu16.04 mysql group报错ERROR 1055 (42000): Expression #1

ubuntu16.04 apache2.4 php7.0 mysql5.7 $ordergoods=db('ordergoods')->where('orderid','in',$orderidarr)->group('orderid')->having('id>0')->select();echo db('order_goods')->getLast......

Marhal ⋅ 03/27 ⋅ 0

mysql 5.6 非空值添加的 bug 求指点

公司有个项目是,PHP写的,mysql是5.2版本 --我把项目移到公司服务器上,MYSQL版本是5.6的,问题来了。 以前可以为空添加的值,现在都无法添加了,晕,查了好多资料,都为解决: 比如: 1:默...

Mi丶Long ⋅ 2015/09/17 ⋅ 0

急,关于插入MySQl表自增长ID的问题

大家好,在开发的时候遇到一个bug,网上找了一些答案但是还没有解决,恳请大家帮忙解决: 环境:MySql5.0.18 JDK:1.6.0_30 JDBC驱动包:mysql-connector-java-5.1.10-bin.jar Java Code Sta...

忠平 ⋅ 2012/03/01 ⋅ 6

MySQL级联复制配置

环境: 10.0.0.51/172.16.1.51 mysql01 主库 CentOS 7.2 10.0.0.52/172.16.1.52 mysql02 中继从库 CentOS 7.2 10.0.0.53/172.16.1.53 mysql03 从库 CentOS 7.2 mysql01配置: [mysqld] bind-......

lxc2002 ⋅ 2017/10/25 ⋅ 0

MySQL之Field‘***’doesn’t have a default value错误解决办法

首先排查一下数据库中对应的字段是不是设置为不能为空,以致数据插入不进去。我的就是这个原因解决的。 下面,整理一下网上的相同问题的其他解决办法,方便出现问题的同学参考: 1、打开my....

Jack088 ⋅ 2016/04/30 ⋅ 0

解决BLOB/TEXT column can't have a default value query问题

转载自:http://www.sharkuo.com/BLOB-TEXT-column-cannot-have-a-default-value-query Create table的时候,报错BLOB/TEXT column 'xxxxxx(表名称)' can't have a default value query,意思......

gxk9933 ⋅ 2011/02/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部