在MySQL中复制没有数据的表保留自动增量

时间:2014-06-12 18:05:24

标签: mysql sql database database-schema auto-increment

使用查询将MySQL表复制到新表(不包括数据)时遇到了麻烦:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0

复制表格,正确插入结构和列名称。但是auto_increment字段和主键字段存在问题,因为它们没有像原始表一样插入。 (这些字段不再是PK和AI了)我使用的是MySQL 5.5和PMA 3.5.8.2

我希望有人可以帮助我。

谢谢你。

2 个答案:

答案 0 :(得分:1)

您可能需要运行2个查询。

CREATE TABLE foo LIKE bar;
ALTER TABLE foo AUTO_INCREMENT = (SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'bar');

您必须将DatabaseName替换为数据库的名称。这是未经测试的,但我认为它会给你你想要的东西。

所以我尝试测试上面的查询,并且ALTER TABLE语句似乎因select而失败。可能有更好的方法,但对我有用的方法是将自动增量值设置为变量,然后准备语句并执行它。

例如,您将继续创建您的表:

CREATE TABLE foo LIKE bar;

然后将ALTER TABLE语句设置为变量

SET @ai = CONCAT("ALTER TABLE foo AUTO_INCREMENT =", (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'databasename' AND TABLE_NAME = 'bar'));

最后,您将准备并执行该声明。

PREPARE query FROM @ai;
EXECUTE query;
DEALLOCATE PREPARE query;

答案 1 :(得分:0)

除了您的列之外,表结构:索引,主键,触发器等不会被这种语句复制。你需要运行一堆alter table语句来添加你的结构,或者你需要先创建包含所有周围结构的表,然后用你的select加载它。