如何使用外键定义创建像A一样的表B?

ami*_*ree 5 mysql

我可以使用以下查询sales_order在数据库中创建与主数据库中的表archived_db具有相同架构的表:sales_orderprod_db

CREATE TABLE archived_db.sales_order LIKE prod_db.sales_order

它工作正常,并archived_db使用与 中相同的表结构创建 sales_order 表prod_db。没有复制/创建的一件事是外键。

所以,我的问题是,是否可以使用具有相同外键的表 A 的架构来创建表 B?

Bil*_*win 5

你可以使用这个:

SHOW CREATE TABLE prod_db.sales_order
Run Code Online (Sandbox Code Playgroud)

这显示了 CREATE TABLE 语句语法中的表定义。

将其结果捕获到字符串中,然后将该字符串作为 SQL 语句运行。

我认为它CREATE TABLE <B> LIKE <A>不支持外键,因为外键是依赖于存储引擎的功能。与引擎无关的元数据不存储外键定义。这是 MySQL 奇怪的历史和可插拔存储引擎架构带来的意想不到的后果之一。


回复您的评论:

错误 1215 (HY000):无法添加外键约束

父表是否存在于您在其中创建复制表的存档数据库模式中?我想外键定义不限定表名称,并假设父表与表处于相同的架构中sales_order

如果您需要指定外键引用的架构,最好像CREATE TABLE LIKE以前一样使用创建表,然后使用添加外键ALTER TABLE