一个分享WordPress、Zblog、Emlog、Typecho等主流博客的教程网站!
当前位置:网站首页 > 其他教程 > 正文

mysql 命令复制表结构,手动设置自增建设置失败解决方法

作者:xlnxin发布时间:2026-10-18分类:其他教程浏览:202


导读:用CREATETABLE...ASSELECT复制表结构时,自增属性不会一起带过去,这是正常现象;手动补自增失败,通常是因为该列还没被定义为主键或唯一键,MySQL要求...

用 CREATE TABLE... AS SELECT 复制表结构时,自增属性不会一起带过去,这是正常现象;手动补自增失败,通常是因为该列还没被定义为主键或唯一键,MySQL 要求自增列必须是键。

你之前的场景也遇到过这个坑——用 CREATE TABLE... SELECT * FROM 建出来的新表,id 字段只保留了普通列定义,主键、索引、自增全丢了。

怎么解决

先把 id 设为主键:

ALTER TABLE 新表名 MODIFY COLUMN id INT NOT NULL PRIMARY KEY;

再设自增:

ALTER TABLE 新表名 MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;

两步分开执行,就不会报 #1075 错误。

#1075 的意思是“自增列必须定义为键”,所以必须先补主键或唯一键,再设置自增。

更稳妥的复制方式

如果你需要完整保留主键、索引和自增属性,推荐用 LIKE 而不是 AS SELECT:

CREATE TABLE 新表名 LIKE 原表名;
INSERT INTO 新表名 SELECT * FROM 原表名;

LIKE 会连索引、主键、自增计数器一起复制,但不会带数据,需要再手动插入。

两个容易忽略的坑

自增起点可能偏大:用 INSERT INTO... SELECT 灌数据时,如果手动指定了 id 且值较大,自增计数器会自动跳到“最大 id + 1”附近,导致后续自增 id 不连续,但不影响使用。

数据类型必须是整数:自增列只能用 INT、BIGINT 这类整数类型,如果用 VARCHAR 或浮点类型,会直接报错。

标签:mysql