MySQL. Не могу создать таблицу errno 150 - PullRequest
68 голосов
/ 17 ноября 2009

Мне нужно создать базу данных с двумя таблицами в MySQL, но скрипт завершается ошибкой с ошибкой 150 (проблема с внешним ключом). Я дважды проверил поля внешнего ключа на одинаковые в обеих таблицах и не могу найти ни одной ошибки.

Вот скрипт:

 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

 DROP SCHEMA IF EXISTS `testdb`;
 CREATE SCHEMA IF NOT EXISTS `testdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
 USE `testdb`;

 DROP TABLE IF EXISTS `testdb`.`table1` ;

 CREATE  TABLE IF NOT EXISTS `testdb`.`table1` (
   `id` INT UNSIGNED NOT NULL ,
   `field1` VARCHAR(50) NULL ,
   PRIMARY KEY (`id`) )

 ENGINE = InnoDB;


 DROP TABLE IF EXISTS `testdb`.`table2` ;

 CREATE  TABLE IF NOT EXISTS `testdb`.`table2` (
   `id` INT NOT NULL AUTO_INCREMENT ,
   `field1` VARCHAR(50) NULL ,
   `date` DATE NULL ,
   `cnt` INT NULL ,
   PRIMARY KEY (`id`) ,
   INDEX `FK_table2_table1` (`field1` ASC) ,
   CONSTRAINT `FK_table2_table1`
   FOREIGN KEY (`field1`)
   REFERENCES `testdb`.`table1` (`field1` )
   ON DELETE NO ACTION
   ON UPDATE NO ACTION)

 ENGINE = InnoDB;

 SET SQL_MODE=@OLD_SQL_MODE;
 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Я пробовал это в Windows и Ubuntu с разными версиями MySQL и не работал.

Есть идеи?

Ответы [ 22 ]

0 голосов
/ 23 декабря 2017

Когда у меня возникла эта проблема, это было потому, что я установил идентификатор в первой таблице на unsigned, тогда как внешнего ключа во второй таблице не было. Делая их обоих unsigned исправил это для меня.

0 голосов
/ 27 июня 2013

У меня была похожая ошибка на одной из моих таблиц. Когда проверенный столбец Collation был другим, сработало, как только оба столбца изменились на один и тот же тип сортировки.

После прочтения большей части предложенного решения здесь. Я просто подумал, что было бы полезно, если бы я просто перечислил все возможности, которые могут вызвать эту ошибку.

1, проверьте случай столбца 2, проверьте КОЛЛЕКЦИЯ столбцов 3. Проверьте, существует ли ключ, созданный в обеих таблицах для столбца (уникальный, основной)

...