| Bug #44890 | Foreign Keys: rename fails on temporary table | ||
|---|---|---|---|
| Submitted: | 14 May 2009 23:38 | Modified: | 18 May 2009 15:27 |
| Reporter: | Peter Gulutzan | Email Updates: | |
| Status: | Not a Bug | Impact on me: | |
| Category: | MySQL Server: General | Severity: | S3 (Non-critical) |
| Version: | 6.1.0-alpha | OS: | Linux (SUSE 11 64-bit) |
| Assigned to: | Dmitry Lenev | CPU Architecture: | Any |
[15 May 2009 15:05]
MySQL Verification Team
Thank you for the bug report. Verified as described:
miguel@hegel:~/dbs/6.1st$ bin/mysql -uroot test
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 6.1.0-alpha-debug Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create table t1 (s1 int primary key);
Query OK, 0 rows affected (0.08 sec)
mysql> create table t2 (s1 int references t1(s1)
-> on update restrict on delete restrict);
Query OK, 0 rows affected (0.18 sec)
mysql> create temporary table t2 (s1 int);
Query OK, 0 rows affected (0.01 sec)
mysql> rename table t2 to t3;
ERROR 1811 (HY000): Foreign key error: you cannot use 'RENAME TABLE' statement because 't2' table is in a relationship
mysql>
[18 May 2009 15:27]
Dmitry Lenev
Additional investigation shows that our RENAME TABLE statement cannot be used to rename temporary tables. The 6.0 manual says (see http://dev.mysql.com/doc/refman/6.0/en/rename-table.html): --- You cannot use RENAME to rename a TEMPORARY table. However, you can use ALTER TABLE instead: mysql> ALTER TABLE orig_name RENAME new_name; --- I.e. in the above situation RENAME TABLE is supposed to rename non-temporary table and not temporary table as you have expected (and this is what actually happens if you remove foreign key definitions from the example). Therefore I think an error message that you get in is the appropriate error message for this situation. I am closing this report as "Not a Bug". Please feel free to re-open it if you disagree with my analysis!

Description: I'm using mysql-6.1-fk-stage. I start the server with mysqld --foreign-key-all-engines=1. I can't rename a temporary table which has the same name as a persistent foreign-key table. This affects Milestone 14 of the foreign keys project. How to repeat: create table t1 (s1 int primary key); create table t2 (s1 int references t1(s1) on update restrict on delete restrict); create temporary table t2 (s1 int); rename table t2 to t3; Sample run: mysql> create table t1 (s1 int primary key); Query OK, 0 rows affected (0.25 sec) mysql> create table t2 (s1 int references t1(s1) -> on update restrict on delete restrict); Query OK, 0 rows affected (0.17 sec) mysql> create temporary table t2 (s1 int); Query OK, 0 rows affected (0.00 sec) mysql> rename table t2 to t3; ERROR 1811 (HY000): Foreign key error: you cannot use 'RENAME TABLE' statement because't2' table is in a relationship