云数据库 MySQL MyISAM 自动转换为 InnoDB 引擎限制

这里说明 MyISAM 引擎自动转换为 InnoDB 引擎后,创建表时报错的解决方案。

相关产品
云数据库 MySQL 产品页,含版本规格、价格与购买入口。

一、背景

腾讯云数据库 MySQL 默认支持 InnoDB 存储引擎,并在 MySQL 5.6 及以上的版本中,不再支持 MyISAM 引擎和 Memory 引擎,详情请参见 数据库存储引擎。
当数据库迁移或升级到云数据库 MySQL 5.6 及以上版本时,系统会自动将 MyISAM 引擎转换为 InnoDB 引擎。
由于 MyISAM 引擎支持复合主键包含自增列,而 InnoDB 引擎不支持,因此 MyISAM 引擎转换为 InnoDB 引擎后,创建表时会报错,报错信息为ERROR 1075 (42000):Incorrect table definition;there can be only one auto column and it must be defined as a key。
建议你通过为自增列创建索引的方式,实现 InnoDB 引擎的复合主键包含自增列语法。

二、InnoDB 引擎复合主键包含自增列的修改方案

1. 原创建表报错的 SQL 语句:

create table t_complexkey ( id int(8) AUTO_INCREMENT, name varchar(19), value varchar(10), primary key (name,id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

如下创建报错:

2. 修改创建索引后的 SQL 语句:

create table t_complexkey ( id int(8) AUTO_INCREMENT, name varchar(19), value varchar(10), primary key (name,id), key key_id (id) ## 为自增列创建索引 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

如下创建成功:


3. 查看创建好的表结构:

show create table t_complexkey;

如下:

赞 (0)
上一篇 4天前
下一篇 4天前