Я хочу додати зовнішній ключ до таблиці під назвою "каталог".
ALTER TABLE katalog
ADD CONSTRAINT `fk_katalog_sprache`
FOREIGN KEY (`Sprache`)
REFERENCES `Sprache` (`ID`)
ON DELETE SET NULL
ON UPDATE SET NULL;
Коли я намагаюся це зробити, я отримую це повідомлення про помилку:
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150)
Помилка статусу INNODB:
120405 14:02:57 Помилка в обмеженні зовнішнього ключа таблиці 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
Коли я використовую цей запит, він працює, але з неправильною дією "при видаленні":
ALTER TABLE `katalog`
ADD FOREIGN KEY (`Sprache` ) REFERENCES `sprache` (`ID` )
Обидві таблиці є InnoDB, і обидва поля "INT (11) не є нульовими". Я використовую MySQL 5.1.61. Спроба запустити цей ALTER-запит за допомогою MySQL Workbench (найновіший) на MacBook Pro.
Таблиця Створення виписок:
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
katalog
має int(11) unsigned
. sprache
не має usigned
частини, тому два стовпці не однакові.
auto_increment
стовпці, що погано. Крім того , керівництво по MySQL каже: 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.
. Тому так, подібний тип даних і однаковий знак.
SHOW CREATE TABLE
, я можу лише запитати - чи ім'я стовпця дійсно ідентифікується з великим регістром?