Mysql 像其他表一样创建表

Mysql create tables like other tables

我有 5 个数据库(或模式)在 MySQL 中有超过 100 个 table,现在我需要创建新的数据库,它有 table 像旧的 table秒。 新 table 的名字采用这种格式

"OldDatabaseName"_"OldTableName"_History

它们的列几乎相同,只是我需要为每个 [=30] 添加 2 个新列,如 STARTEND =].

新的table中不会有任何外键,也不会有任何自增列,只有ID和START 列将是唯一键。

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

首先使用这个

创建 table
create table new_table select * from old_table;

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

鉴于最近的评论,最好的答案似乎是使用 mysqldump 转储 table,在提交 CREATE TABLE 和之前修改输出中的 table 名称INSERT 再次。然后你可以 ALTER TABLEUPDATE 这个新的 tablea 到你喜欢的。

"Are there any loop through solution for this?" 是的

编写存储过程并:

  • 声明变量、游标和Exception_Handler(我们使用Exception_Handler为我们的循环找到一个出口点)

  • 从 information_schema.tables 加载所有 schema_names/table_names
    应该复制到游标中(游标允许我们获取
    数据到变量中,以便我们可以在语句中使用它们)。

  • 之后你可以在循环中使用 schema_names/table_names 创建一个 新模式中每个 table 的副本。只需获取 schema_name 和 table_name 进入变量并使用准备好的语句来创建你的 table秒。每 运行 到 table 都会从内部创建 环形。一旦创建了所有 tables,就会发生异常以告知 你没有更多的数据。

正如人们指出的那样:

  • 没有键的空 tables :

    create table new_schema_name.new_table_name 
    select * from old_schema_name.old_table_name limit 0;
    
  • filled tables without keys (includes all data of the original table) :

    create table new_schema_name.new_table_name
    select * from old_schema_name.old_table_name;
    
  • 空 table 具有原始 table 的所有属性(以防需要):

    create table new_schema_name.new_table_name 
    like old_schema_name.old_table_name ;
    

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

我推荐存储过程方法