我有5个数据库(或模式),在MySQL中有超过100个表,现在我需要创建新数据库,其中包含像旧表这样的表。 新表的名称采用这种格式
“OldDatabaseName” _ “OldTableName” _history
他们的列几乎相同,只需要为每个表添加2个新列,例如 START 和 END 时间戳。
新表中没有任何外键,也没有任何自动增量列,只有 ID和START 列才是唯一键。
那么,为此需要使用哪种SQL?
答案 0 :(得分:1)
首先使用这个
创建表create table new_table select * from old_table;
然后使用alter table query来改变你的愿望
答案 1 :(得分:1)
鉴于最近的评论,最好的答案似乎是使用mysqldump转储表,在再次提交CREATE TABLE
和INSERT
之前修改输出中的表名。然后,您可以根据自己的喜好ALTER TABLE
和UPDATE
这个新的表格。
答案 2 :(得分:1)
“这有解决方案吗?” 是。
编写存储过程并:
声明变量,Cursor和Exception_Handler(我们使用Exception_Handler查找循环的退出点)
从information_schema.tables加载所有schema_names / table_names
应该复制到光标中(光标允许我们获取
数据变成变量,所以我们可以在我们的陈述中使用它们。
没有键的空表:
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的列表。 与编写和测试程序相比,这将比运行程序花费更多的时间,但对于初学者来说仍然应该更快。
我推荐存储过程方法