| Bug #45787 | ALTER TABLE doesn't differentiate between unique and foreign key | ||
|---|---|---|---|
| Submitted: | 26 Jun 2009 11:35 | Modified: | 26 Jun 2009 13:10 |
| Reporter: | Björn Lindqvist | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: DDL | Severity: | S3 (Non-critical) |
| Version: | 5.0.67 | OS: | Linux |
| Assigned to: | CPU Architecture: | Any | |
[26 Jun 2009 11:35]
Björn Lindqvist
[26 Jun 2009 12:36]
Valeriy Kravchuk
Thank you for the problem report. I think this happened just because in older version table was created as InnoDB while in a new one it is MyISAM (and for these tables foreign key references are just silently ignored). Look:
mysql> show create table bajs\G
*************************** 1. row ***************************
Table: bajs
Create Table: CREATE TABLE `bajs` (
`email` varchar(200) default NULL,
UNIQUE KEY `unq_email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> alter table bajs drop foreign key unq_email;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table bajs\G
*************************** 1. row ***************************
Table: bajs
Create Table: CREATE TABLE `bajs` (
`email` varchar(200) default NULL,
UNIQUE KEY `unq_email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> alter table bajs engine=InnoDB;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table bajs\G
*************************** 1. row ***************************
Table: bajs
Create Table: CREATE TABLE `bajs` (
`email` varchar(200) default NULL,
UNIQUE KEY `unq_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> alter table bajs drop foreign key unq_email;
ERROR 1025 (HY000): Error on rename of './test/bajs' to './test/#sql2-3b37-15' (errno: 152)
mysql> show create table bajs\G
*************************** 1. row ***************************
Table: bajs
Create Table: CREATE TABLE `bajs` (
`email` varchar(200) default NULL,
UNIQUE KEY `unq_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> select version();
+--------------+
| version() |
+--------------+
| 5.0.84-debug |
+--------------+
1 row in set (0.00 sec)
In both cases, as you can see, UNIQUE key is NOT dropped. I think this is not a bug. Please, check.
[26 Jun 2009 13:10]
Björn Lindqvist
Yes, you are correct. The new MySQL:s create MyISAM tables by default while the older one used InnoDB, which I missed. But isn't it strange that 5.0.67 creates InnoDB and 5.0.75 creates MyISAM? :)
