Я хочу добавить внешний ключ в таблицу под названием "katalog".
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
mysql
foreign-keys
frgtv10
источник
источник
SHOW CREATE TABLE
, я могу только спросить - действительно ли имя столбца идентифицировано в верхнем регистре?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.
. Поэтому да, похожий тип данных и тот же знак.Ответы:
Чтобы добавить внешний ключ (grade_id) в существующую таблицу (пользователи), выполните следующие действия:
источник
Просто используйте этот запрос, я пробовал его по моему сценарию, и он работает хорошо
источник
Простые шаги ...
источник
проверьте эту ссылку. Это помогло мне с ошибкой 150: http://verysimple.com/2006/10/22/mysql-error-number-1005-cant-create-table-mydbsql-328_45frm-errno-150/
На моей голове две вещи приходят на ум.
Я предполагаю, что проблема с установленным NULL при обновлении (если мои мозги не возвращаются сегодня, как это часто бывает ...).
Изменить: я пропустил комментарии к вашему оригинальному сообщению. Неподписанные / не неподписанные столбцы int могут решить ваш случай. Надеюсь, моя ссылка поможет кому-то в будущем подумать.
источник
Но ваш стол имеет:
Она не может установить столбец Sprache в NULL , поскольку оно определяется как NOT NULL.
источник
MySQL выполнит этот запрос:
Ура!
источник
Как исправить
Error Code: 1005. Can't create table 'mytable.#sql-7fb1_7d3a' (errno: 150) in mysql.
измените свою таблицу и добавьте к ней индекс ..
Теперь добавьте ограничение
Обратите внимание, если вы не добавите индекс, он не будет работать.
После 6 часов борьбы с ним я нашел решение, надеюсь, это спасет душу.
источник
Когда вы добавляете ограничение внешнего ключа в таблицу с помощью ALTER TABLE, не забудьте сначала создать необходимые индексы.
источник
попробуйте все в одном запросе
источник
это в основном происходит потому, что ваши таблицы находятся в двух разных кодировках. Например, одна таблица, созданная в charset = utf-8, и другие таблицы созданы в CHARSET = latin1, так что вы хотите иметь возможность добавить внешний ключ к этим таблицам. используйте одну и ту же кодировку в обеих таблицах, тогда вы сможете добавить внешние ключи. ошибка 1005 неправильного формирования внешнего ключа может решить эту проблему
источник
я столкнулся с той же проблемой. В моем случае в таблице уже есть данные, и в этой таблице есть ключ, которого нет в справочной таблице. Поэтому мне пришлось удалить эти строки, которые не соблюдают ограничения, и все работает.
источник
Шаг 1: запустить этот скрипт
шаг 2: добавить столбец
шаг 3: добавление внешнего ключа в добавляемый столбец
шаг 4: запустите этот скрипт
источник
Пример:-
источник