Mysql 像其他表一样创建表
Mysql create tables like other tables
我有 5 个数据库(或模式)在 MySQL 中有超过 100 个 table,现在我需要创建新的数据库,它有 table 像旧的 table秒。
新 table 的名字采用这种格式
"OldDatabaseName"_"OldTableName"_History
它们的列几乎相同,只是我需要为每个 [=30] 添加 2 个新列,如 START 和 END =].
新的table中不会有任何外键,也不会有任何自增列,只有ID和START 列将是唯一键。
那么,为此我需要使用哪种 SQL?
首先使用这个
创建 table
create table new_table select * from old_table;
然后使用 alter table 查询来改变你的愿望
鉴于最近的评论,最好的答案似乎是使用 mysqldump 转储 table,在提交 CREATE TABLE
和之前修改输出中的 table 名称INSERT
再次。然后你可以 ALTER TABLE
和 UPDATE
这个新的 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 中选择。
这将比 运行 执行该过程花费更多的时间,但与编写和测试该过程相比,对于初学者来说仍然更快。
我推荐存储过程方法
我有 5 个数据库(或模式)在 MySQL 中有超过 100 个 table,现在我需要创建新的数据库,它有 table 像旧的 table秒。 新 table 的名字采用这种格式
"OldDatabaseName"_"OldTableName"_History
它们的列几乎相同,只是我需要为每个 [=30] 添加 2 个新列,如 START 和 END =].
新的table中不会有任何外键,也不会有任何自增列,只有ID和START 列将是唯一键。
那么,为此我需要使用哪种 SQL?
首先使用这个
创建 tablecreate table new_table select * from old_table;
然后使用 alter table 查询来改变你的愿望
鉴于最近的评论,最好的答案似乎是使用 mysqldump 转储 table,在提交 CREATE TABLE
和之前修改输出中的 table 名称INSERT
再次。然后你可以 ALTER TABLE
和 UPDATE
这个新的 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 中选择。 这将比 运行 执行该过程花费更多的时间,但与编写和测试该过程相比,对于初学者来说仍然更快。
我推荐存储过程方法