使用查询将MySQL表复制到新表(不包括数据)时遇到了麻烦:
CREATE TABLE foo SELECT * FROM bar WHERE 1=0
。
复制表格,正确插入结构和列名称。但是auto_increment字段和主键字段存在问题,因为它们没有像原始表一样插入。 (这些字段不再是PK和AI了)我使用的是MySQL 5.5和PMA 3.5.8.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加载它。