Puedo crear la tabla sales_order en la base de datos archived_db con el mismo esquema que la tabla sales_order de la base de datos principal prod_db usando la siguiente consulta:
CREATE TABLE archived_db.sales_order LIKE prod_db.sales_order
Funciona bien y crea la tabla sales_order en archived_db con la misma estructura de tabla que en prod_db . Una cosa que no se copia/crea es la clave externa.
Entonces, mi pregunta es, ¿es posible crear la tabla B usando el esquema de la tabla A con las mismas claves externas?
Puedes usar esto:
SHOW CREATE TABLE prod_db.sales_orderEsto muestra la definición de la tabla en la sintaxis de una sentencia CREATE TABLE.
Capture el resultado de esto en una cadena y luego ejecute esa cadena como una instrucción SQL.
Supongo que CREATE TABLE <B> LIKE <A> no admite claves externas porque las claves externas son una función que depende del motor de almacenamiento. Los metadatos independientes del motor no almacenan definiciones de claves externas. Esta es una de las consecuencias inesperadas de la extraña historia y arquitectura de motores de almacenamiento conectables de MySQL.
Re tu comentario:
ERROR 1215 (HY000): No se puede agregar una restricción de clave externa
¿Existe la tabla principal en el esquema de base de datos archivado en el que está creando la tabla de copia? Me imagino que la definición de clave externa no califica el nombre de la tabla y supone que la tabla principal está en el mismo esquema que la tabla sales_order .
Si necesita especificar a qué esquema hace referencia la clave externa, probablemente sea mejor crear la tabla usando CREATE TABLE LIKE como lo hizo antes, y luego agregar claves externas usando ALTER TABLE .