我可以使用以下查询在数据库archived_db
中创建表sales_order
,其架构与主数据库prod_db
中的sales_order
表相同:
创建表archived_db.sales_order,类似于prod_db.sales_order
它工作良好,并在archived_db
中创建sales_order表,其表结构与prod_db
中的表结构相同。 没有复制/创建的一个东西是外键。
所以,我的问题是,有没有可能使用表A的模式创建表B,并且使用相同的foreign_keys?
您可以使用以下命令:
SHOW CREATE TABLE prod_db.sales_order
这显示了CREATE table语句语法中的表定义。
将结果捕获到一个字符串中,然后将该字符串作为SQL语句运行。
我认为创建表; 像
不支持外键,因为外键是一个依赖于存储引擎的功能。 独立于引擎的元数据不存储外键定义。 这是MySQL奇怪的历史和可插拔存储引擎架构所带来的意想不到的后果之一。
你的意见是:
错误1215(HY000):无法添加外键约束
父表是否存在于您正在其中创建复制表的存档db架构中? 我假设外键定义没有限定表名,并假设父表与sales_order
表处于相同的模式中。
如果您需要指定外键引用哪个模式,最好使用create table like
创建表,然后使用alter table
添加外键。