Pregunta

Siento que he probado todo lo posible en un par muy simple de declaraciones de creación de mesa.

Los tipos coinciden, intenté usar motor = innodb, etc. y estoy perplejo por qué recibo el error de la clave extranjera.

He estado fuera de SQL por algún tiempo, por lo que probablemente sea fácil.

mysql> CREATE TABLE foo_ent(yyy_no VARCHAR(80),
    -> zoo VARCHAR(80),
    -> PRIMARY KEY (yyy_no));
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE cat_ent(some_item INTEGER,
    -> yyy_no VARCHAR(80),
    -> apple DECIMAL(6,2),
    -> PRIMARY KEY (some_item),
    -> FOREIGN KEY (yyy_no) REFERENCES foo_ent);
ERROR 1005 (HY000): Can't create table 'test.cat_ent' (errno: 15
0)

Perdón por los malos nombres de variables, seguros para escribir en exceso las cosas de la compañía.

¿Fue útil?

Solución

No hace referencia a un campo, solo una tabla, que es incorrecta.

...
foreign key (yyy_no) references foo_ent(yyy_no)

Y de acuerdo con su número de error, la documentación de MySQL también establece;

Si recrea una tabla que se eliminó, debe tener una definición que se ajuste a las restricciones de clave extranjera que hace referencia a ella. Debe tener los nombres y tipos de columnas correctos, y debe tener índices en las claves referenciadas, como se indicó anteriormente. Si no están satisfechos, MySQL devuelve el número de error 1005 y se refiere al error 150 en el mensaje de error.

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

Otros consejos

Debe proporcionar el nombre de la columna referenciada explícitamente:

CREATE TABLE cat_ent
        (
        some_item INTEGER NOT NULL,
        yyy_non VARCHAR(80),
        apple DECIMAL(6,2),
        PRIMARY KEY (some_item),
        FOREIGN KEY (yyy_non) REFERENCES foo_ent(yyy_no)
        );

Considere reescribir su declaración de clave extranjera para enumerar explícitamente la columna en foo_ent que desea que guarde:

Crear tabla CAT_ENT (Some_item Integer, A yyy_NO Varchar (80), Apple Decimal (6,2), Key primario (Some_Item), Extraal Key (YYY_NO) Referencias foo_ent (yyy_no)) motor = innoDB;

funciona para mi.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top