Mysql像其他表一样创建表

时间:2016-04-19 12:28:12

标签: mysql sql database create-table

我有5个数据库(或模式),在MySQL中有超过100个表,现在我需要创建新数据库,其中包含像旧表这样的表。 新表的名称采用这种格式

  

“OldDatabaseName” _ “OldTableName” _history

他们的列几乎相同,只需要为每个表添加2个新列,例如 START END 时间戳。

新表中没有任何外键,也没有任何自动增量列,只有 ID和START 列才是唯一键。

那么,为此需要使用哪种SQL?

3 个答案:

答案 0 :(得分:1)

首先使用这个

创建表
create table new_table select * from old_table;

然后使用alter table query来改变你的愿望

答案 1 :(得分:1)

鉴于最近的评论,最好的答案似乎是使用mysqldump转储表,在再次提交CREATE TABLEINSERT之前修改输出中的表名。然后,您可以根据自己的喜好ALTER TABLEUPDATE这个新的表格。

答案 2 :(得分:1)

“这有解决方案吗?” 是。

编写存储过程并:

  • 声明变量,Cursor和Exception_Handler(我们使用Exception_Handler查找循环的退出点)

  • 从information_schema.tables加载所有schema_names / table_names 应该复制到光标中(光标允许我们获取
    数据变成变量,所以我们可以在我们的陈述中使用它们。

  • 之后,您可以在循环中使用schema_names / table_names来创建 新架构中每个表的副本。只需获取schema_name和 table_name转换为变量并使用预编译语句来创建你的 表。每个贯穿一个表将从内部创建 环。一旦创建了所有表,就会发生异常 你没有更多的数据。
人们已经指出:

  • 没有键的空表:

    create table new_schema_name.new_table_name 
    select * from old_schema_name.old_table_name limit 0;
    
  • 没有键的填充表(包括原始表的所有数据):

    create table new_schema_name.new_table_name
    select * from old_schema_name.old_table_name;
    
  • 包含原始表所有属性的空表(如果需要):

    create table new_schema_name.new_table_name 
    like old_schema_name.old_table_name ;
    

如果您有小表(<500万条记录[也取决于硬件])并且您不想重复此作业,则可以使用GUI通过拖放来复制表格。 Navicat for MySQL支持此功能。 之后,您可以使用texteditor + excel构建alter命令来调整表名并添加新列。可以从information_schema.tables中选择table_names的列表。 与编写和测试程序相比,这将比运行程序花费更多的时间,但对于初学者来说仍然应该更快。

我推荐存储过程方法