We're trying to rename a column in MySQL (5.1.31, InnoDB) that is a foreign key to another table.
At first, we tried to use Django-South, but came up against a known issue:
http://south.aeracode.org/ticket/243
OperationalError: (1025, "Error on rename of './xxx/#sql-bf_4d' to './xxx/cave_event' (errno: 150)")
AND
Error on rename of './xxx/#sql-bf_4b' to './xxx/cave_event' (errno: 150)
This error 150 definitely pertains to foreign key constraints. See e.g.
What does mysql error 1025 (HY000): Error on rename of './foo' (errorno: 150) mean?
http://www.xaprb.com/blog/2006/08/22/mysqls-error-1025-explained/
So, now we're trying to do the renaming in raw SQL. It looks like we're going to have to drop the foreign key first, then do the rename, and then add the foreign key back again. Does that sound right? Is there a better way, since this seems pretty confusing and cumbersome?
Any help would be much appreciated!
here is the SQL syntax for regular keys
This task becomes simpler if you use GUI tools. I tried to rename ID column using IntelliJ IDEA Database tool and it worked like a charm! I don't have to bother about foreign keys when renaming a table or column.
See more details in IntelliJ IDEA Help | Renaming items.
AFAIK, dropping the constraint, then rename, then add the constraint back is the only way. Backup first!
The following query will build the correct syntax automatically. Just execute each line returned and all your FKEYs will be gone.
I leave the reverse (adding them back) as an exercise for you.
In case anyone is looking for the syntax it goes something like this:
Expanding on @Dewey's answer, here's a little script to rename FKs generated by Hibernate in a useful manner
("FK__" + table name + "__" + referenced table name)
.A bit of output: