Quiero agregar una clave externa a una tabla llamada "katalog".
ALTER TABLE katalog
ADD CONSTRAINT `fk_katalog_sprache`
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL;
Cuando trato de hacer esto, recibo este mensaje de error:
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150)
Error en el estado INNODB:
120405 14:02:57 Error en la restricción de clave externa de la tabla mytable. # Sql-7fb1_7d3a:
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL:
Cannot resolve table name close to:
(`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL
Cuando uso esta consulta funciona, pero con una acción incorrecta "al eliminar":
ALTER TABLE `katalog`
ADD FOREIGN KEY (`Sprache` ) REFERENCES `sprache` (`ID` )
Ambas tablas son InnoDB y ambos campos son "INT (11) no nulo". Estoy usando MySQL 5.1.61. Intentando activar esta consulta ALTER con MySQL Workbench (la más nueva) en un MacBook Pro.
Tabla Crear declaraciones:
CREATE TABLE `katalog` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`AnzahlSeiten` int(4) unsigned NOT NULL,
`Sprache` int(11) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `katalogname_uq` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC$$
CREATE TABLE `sprache` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Bezeichnung` varchar(45) NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `Bezeichnung_UNIQUE` (`Bezeichnung`),
KEY `ix_sprache_id` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
mysql
foreign-keys
frgtv10
fuente
fuente
SHOW CREATE TABLE
, solo puedo preguntar: ¿el nombre de la columna es realmente ID, en mayúsculas?katalog
tieneint(11) unsigned
.sprache
no tiene lausigned
parte, por lo tanto, dos columnas no son lo mismo.auto_increment
columnas, lo cual es malo. Además, el manual de MySQL dice:Corresponding columns in the foreign key and the referenced key must have similar internal data types inside InnoDB so that they can be compared without a type conversion. The size and sign of integer types must be the same. The length of string types need not be the same. For nonbinary (character) string columns, the character set and collation must be the same.
. Por lo tanto, sí, tipo de datos similar y el mismo signo.Respuestas:
Para agregar una clave externa (grade_id) a una tabla existente (usuarios), siga los siguientes pasos:
fuente
Simplemente use esta consulta, lo he intentado según mi escenario y funciona bien
fuente
Pasos simples ...
fuente
revisa este enlace. Me ha ayudado con errno 150: http://verysimple.com/2006/10/22/mysql-error-number-1005-cant-create-table-mydbsql-328_45frm-errno-150/
En lo alto de mi cabeza me vienen a la mente dos cosas.
Supongo que el problema es con el conjunto NULL en la actualización (si mis cerebros no están al revés hoy, ya que a menudo son ...).
Editar: me perdí los comentarios en tu publicación original. Las columnas int sin firmar / sin firmar pueden resolver su caso. Espero que mi enlace ayude a alguien en el futuro.
fuente
Pero tu mesa tiene:
No puede establecer la columna Sprache en NULL porque se define como NOT NULL.
fuente
MySQL ejecutará esta consulta:
¡Salud!
fuente
Como arreglar
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150) in mysql.
alterar su tabla y agregarle un índice.
Ahora agregue la restricción
Tenga en cuenta que si no agrega un índice, no funcionará.
Después de luchar con él durante aproximadamente 6 horas, encontré la solución, espero que esto salve un alma.
fuente
Cuando agrega una restricción de clave externa a una tabla usando ALTER TABLE, recuerde crear primero los índices requeridos.
fuente
intente todo en una consulta
fuente
Esto sucede básicamente porque sus tablas están en dos conjuntos de caracteres diferentes. Como ejemplo, una tabla creada en charset = utf-8 y otras tablas se crean en CHARSET = latin1, por lo que es posible que pueda agregar una clave extranjera a estas tablas. use el mismo juego de caracteres en ambas tablas, entonces podrá agregar claves extranjeras. error 1005 restricción foriegn clave incorrectamente formada puede resolver a partir de esto
fuente
Pasé por el mismo problema. En mi caso, la tabla ya tiene datos y había claves en esta tabla que no estaban presentes en la tabla de referencia. Así que tuve que eliminar estas filas que no respetan las restricciones y todo funcionó.
fuente
Paso 1: ejecuta este script
Paso 2: agregar columna
Paso 3: agregue la clave externa a la columna agregada
Paso 4: ejecuta este script
fuente
Ejemplo:-
fuente