Mysql像其他表一样创建表

标签 mysql sql database create-table

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

"OldDatabaseName"_"OldTableName"_History

它们的列几乎相同,只是我需要为每个表添加 2 个新列,如 STARTEND 时间戳。

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

那么,为此我需要使用什么样的 SQL?

最佳答案

“有没有解决这个问题的循环?” 是的。

编写存储过程并:

  • 声明变量、游标和 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 列表。 这将比运行该过程花费更多的时间,但与编写和测试该过程相比,对于初学者来说仍然更快。

我推荐存储过程方法

关于Mysql像其他表一样创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36718397/

相关文章:

mysql - 在任何索引上搜索 MySQL JSON 字段

MySQL存储过程从in参数设置动态查询

php - 是 LIKE,但 int 表示应检查的字符串

c# - 连接到 SQL 数据库的最佳做法是什么?

database - 如何建立用户/群组/成就数据库?

mysql - 在 MySQL 中使用 MEDIAN 以及 MAX、MIN 和 AVG 函数

javascript - 当每行都有自己的动态值时,动态 php 行仅将第一行的值提供给 javascript 函数

database - 使用继承来解决设计问题

c# - Entity Framework 事务

php - 由于更新 mySQL,无法执行 header 位置 - 需要帮助