MySQL - добавление ограничения один раз добавляет его дважды с разным регистром

У меня странное поведение, когда я добавляю ограничение в таблицу MySQL:

[...] add constraint qrtz_blob_triggers_ibfk_1 foreign key [...]

Теперь SHOW CREATE TABLE показывает ограничение дважды:

CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY [...]
CONSTRAINT `QRTZ_BLOB_TRIGGERS_ibfk_1` FOREIGN KEY [...]

Вот полный сеанс:

mysql> DROP DATABASE IF EXISTS my_test; CREATE DATABASE my_test default character set utf8 collate utf8_bin;
Query OK, 2 rows affected (0.07 sec)

Query OK, 1 row affected (0.00 sec)

mysql> use my_test;
Database changed
mysql> 
mysql> DROP TABLE IF EXISTS `QRTZ_TRIGGERS`;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> 
mysql> CREATE TABLE `QRTZ_TRIGGERS` (
       `TRIGGER_NAME` varchar(80) NOT NULL,
       `TRIGGER_GROUP` varchar(80) NOT NULL,
       PRIMARY KEY (`TRIGGER_NAME`,`TRIGGER_GROUP`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.08 sec)

mysql> 
mysql> DROP TABLE IF EXISTS `QRTZ_BLOB_TRIGGERS`;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> 
mysql> create table `QRTZ_BLOB_TRIGGERS` (`TRIGGER_NAME` varchar(80) not null, `TRIGGER_GROUP` varchar(80) not null, `BLOB_DATA` longblob, primary key (`TRIGGER_NAME`, `TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.08 sec)

mysql> 
mysql> alter table `QRTZ_BLOB_TRIGGERS`  add index qrtz_blob_triggers_ibfk_1 (`TRIGGER_NAME`, `TRIGGER_GROUP`), add constraint qrtz_blob_triggers_ibfk_1 foreign key (`TRIGGER_NAME`, `TRIGGER_GROUP`) references `QRTZ_TRIGGERS` (`TRIGGER_NAME`, `TRIGGER_GROUP`) ON UPDATE RESTRICT ON DELETE RESTRICT;
Query OK, 0 rows affected (0.18 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> 
mysql> show create table QRTZ_BLOB_TRIGGERS \G
*************************** 1. row ***************************
       Table: QRTZ_BLOB_TRIGGERS
Create Table: CREATE TABLE `QRTZ_BLOB_TRIGGERS` (
  `TRIGGER_NAME` varchar(80) NOT NULL,
  `TRIGGER_GROUP` varchar(80) NOT NULL,
  `BLOB_DATA` longblob,
  PRIMARY KEY (`TRIGGER_NAME`,`TRIGGER_GROUP`),
  KEY `qrtz_blob_triggers_ibfk_1` (`TRIGGER_NAME`,`TRIGGER_GROUP`),
  CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`TRIGGER_NAME`, `TRIGGER_GROUP`),
  CONSTRAINT `QRTZ_BLOB_TRIGGERS_ibfk_1` FOREIGN KEY (`TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`TRIGGER_NAME`, `TRIGGER_GROUP`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

С использованием

[...] add constraint QRTZ_BLOB_TRIGGERS_ibfk_1 foreign key [...]

работает отлично.

Я использую Ubuntu 12.04 LTS с MySQL 5.5:

mysql-server-5.5     5.5.32-0ubuntu0.12.04.1

Кто-нибудь знает, что там происходит?


person Timo    schedule 13.08.2013    source источник
comment
Я устал ... и не наблюдал такого же поведения?!?   -  person Sylvain Leroux    schedule 13.08.2013
comment
Может быть, что-то связанное с lower_case_table_names ?   -  person Sylvain Leroux    schedule 13.08.2013
comment
Может, дважды добавляли? Отбросьте это, используя оба имени.   -  person Mihai    schedule 13.08.2013
comment
У меня lower_case_table_names = 0, как предлагается в руководстве по MySQL: используйте lower_case_table_names = 0 в Unix и [...]   -  person Timo    schedule 13.08.2013
comment
Может быть, у вас файловая система без учета регистра? (Я даже не уверен, повлияет ли this как-то на ограничение идентификаторов ...: °)   -  person Sylvain Leroux    schedule 13.08.2013
comment
Как видно из сеанса, я удалил базу данных и таблицы. Я выпустил только одно заявление об изменении таблицы. :(   -  person Timo    schedule 13.08.2013
comment
Ubuntu с файловой системой ext4. Определенно без учета регистра.   -  person Timo    schedule 13.08.2013


Ответы (1)


Это известная ошибка, исправленная в предстоящий выпуск:

InnoDB переименовал бы определяемое пользователем ограничение внешнего ключа, содержащее строку «ibfk» в своем имени, что привело бы к дублированию ограничения ».

Отчет об ошибке предлагает исправление в версиях 5.1.72, 5.5.32, 5.6.14, 5.7.2, но я подозреваю опечатку для ветки 5.5. Учитывая даты выпуска, я ожидал исправления в версии 5.5. 34.

person RandomSeed    schedule 13.08.2013