Bug #54951 | Creating a unique key across fields that have foreign keys, deletes first FK | ||
---|---|---|---|
Submitted: | 2 Jul 2010 7:51 | Modified: | 27 Jul 2011 21:32 |
Reporter: | Florian Beese | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: DDL | Severity: | S2 (Serious) |
Version: | 5.1.41-3ubuntu12.3, 5.1.49-bzr | OS: | Linux (Ubuntu) |
Assigned to: | CPU Architecture: | Any | |
Tags: | foreign, key, removed, unique |
[2 Jul 2010 7:51]
Florian Beese
[2 Jul 2010 7:58]
Valeriy Kravchuk
Verified just as described with recent 5.1.49 from bzr: ... mysql> SHOW CREATE TABLE tabB_C\G *************************** 1. row *************************** Table: tabB_C Create Table: CREATE TABLE `tabB_C` ( `ID` bigint(20) unsigned NOT NULL DEFAULT '0', `B_ID` bigint(20) unsigned NOT NULL DEFAULT '0', `C_ID` bigint(20) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`ID`), KEY `FK__tabB_C__tabB` (`B_ID`), KEY `FK__tabB_C__tabC` (`C_ID`), CONSTRAINT `FK__tabB_C__tabC` FOREIGN KEY (`C_ID`) REFERENCES `tabc` (`ID`), CONSTRAINT `FK__tabB_C__tabB` FOREIGN KEY (`B_ID`) REFERENCES `tabb` (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec) mysql> ALTER TABLE `testdb`.`tabB_C` ADD UNIQUE INDEX `ix_UNIQUE` USING BTREE(`B_ID`, `C_ID`); Query OK, 0 rows affected (0.64 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SHOW CREATE TABLE tabB_C\G*************************** 1. row *************************** Table: tabB_C Create Table: CREATE TABLE `tabB_C` ( `ID` bigint(20) unsigned NOT NULL DEFAULT '0', `B_ID` bigint(20) unsigned NOT NULL DEFAULT '0', `C_ID` bigint(20) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`ID`), UNIQUE KEY `ix_UNIQUE` (`B_ID`,`C_ID`) USING BTREE, KEY `FK__tabB_C__tabC` (`C_ID`), CONSTRAINT `FK__tabB_C__tabC` FOREIGN KEY (`C_ID`) REFERENCES `tabc` (`ID`), CONSTRAINT `FK__tabB_C__tabB` FOREIGN KEY (`B_ID`) REFERENCES `tabb` (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec)
[27 Jul 2011 21:32]
John Russell
Closing with a doc change, to clarify that the auto-created index can be auto-dropped later if no longer needed because of explicit index creation. Fix is in http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html and corresponding pages for 5.5 and 5.6 Ref Man.