2015-12-03 2 views
0

Старый компьютер: MySQL версии 5.0.51MySQL однажды разрешил колонку CHAR для FK в другую таблицу столбцов ENUM, но не больше?

Новый компьютер: MySQL версии 5.7.9

DDL надрез:

CREATE TABLE lookup (
    keyvalue ENUM ('A', 'B', 'C', 'D') NOT NULL; 
    CONTSTRAINT lookuppk PRIMARY KEY (keyvalue) 
); 

CREATE TABLE othertable (
    otherkey INT(5) NOT NULL AUTO_INCREMENT, 
    refkey CHAR(1), 
    CONSTRAINT otherpk PRIMARY KEY (otherkey), 
    CONSTRAINT reffk FOREIGN KEY (refkey) REFERENCES lookup(keyvalue) 
); 

Результат при запуске на старом компьютере: Нет проблем

Результат при запуске на новом компьютере: ОШИБКА 1215 (HY000): не удается добавить ограничение внешнего ключа

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

Ошибка, похоже, проста в том, что FK должен соответствовать типу данных ссылочного столбца точно. Оглядываясь назад, это плохой дизайн, я старше и мудрее, и я могу измениться. Но то, что мне любопытно, - это то, почему это разрешило более старая версия MySQL. Я просмотрел документацию, но ничего не нашел.

+0

В заявлении CREATE TABLE нет движка. посмотрите, является ли по умолчанию MyISAM. Затем измените его на InnoDB. –

ответ

2

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

ALTER TABLE <table name> ENGINE=InnoDB; 

вы получите такую ​​же ошибку на своем старом компьютере.

Вы также можете проверить это с этим запросом:

show variables like '%storage%'; 

В MySQL 5.7 это будет, вероятно, показать:

+----------------------------+--------+ 
| Variable_name    | Value | 
+----------------------------+--------+ 
| default_storage_engine  | InnoDB | 
| default_tmp_storage_engine | InnoDB | 
| storage_engine    | InnoDB | 
+----------------------------+--------+ 

время на MySQL 5.0 будет показывать MyISAM.

 Смежные вопросы

  • Нет связанных вопросов^_^