create table t1(id int not null primary key, b int, key(b), foreign key(id,b) references t1(id)) engine=innodb;
ERROR 1239 (42000): Incorrect foreign key definition for 'foreign key without name': Key reference and table reference don't match
теперь попробуем сделать то же самое в два этапа.
create table t1(id int not null primary key, b int, key(b)) engine=innodb;
Query OK, 0 rows affected (0.22 sec)
alter table t1 add foreign key(id,b) references t1(id);
ERROR 1005 (HY000): Can't create table 'test.#sql-d88_b' (errno: 150)
В данном случае у нас появляется errno 150, которая является ошибкой сишной библиотеки. Получается что ошибка не была отловлена на этапе разбора команды alter, а возвращена обработчиком innodb при попытке выполнить команду.
1. Верны ли мои рассуждения?
2. Является ли это багом? Ведь речь идет об ошибке синтаксиса и логично если бы она была выявлена при парсинге команды.
Выполнено на 5.5.34-MariaDB-log