2013-08-13 12 views
5

mam to dziwne zachowanie kiedy dodać ograniczenie do tabeli MySQL:MySQL - dodawanie ograniczenie raz dodaje go dwukrotnie diffent przypadku

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

Teraz SHOW CREATE tabela przedstawia ograniczenia dwukrotnie:

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

Oto pełna sesja:

 
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) 

Korzystanie

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

działa dobrze.

używam Ubuntu 12.04 LTS z MySQL 5.5:

mysql-server-5.5  5.5.32-0ubuntu0.12.04.1 

Czy ktoś ma pojęcia, co się tam dzieje?

+0

Zmęczyłem ... i nie zaobserwowałem takiego zachowania?!? –

+0

Może coś związanego z ['lower_case_table_names'] (http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_lower_case_table_names)? –

+0

Może dodałeś go dwa razy? Upuść go, używając obu nazw. – Mihai

Odpowiedz

3

To known bug, ustalone w upcoming release.

InnoDB byłoby zmienić nazwę zdefiniowanej przez użytkownika klucza obcego zawierający ciąg „ibfk” w jego imieniu, w wyniku duplikatu przymusu”

Raport o błędzie informuje o poprawce w wersjach 5.1.72, 5.5.32, 5.6.14, 5.7.2, ale podejrzewam literówkę dla oddziału 5.5. Biorąc pod uwagę daty wydania, oczekiwałbym poprawki w v5.5. .

+0

To wszystko, dziękuję bardzo! – Timo

Powiązane problemy