【MySQL】外部キーの削除時のエラー1091に対処する方法
ここではMySQLで、外部キーの削除時のエラー1091に対処する方法を紹介しています。
外部キーの削除時のエラー1091に対処する方法
今回は次のようにtab1とtab2の2つのテーブルを作成して、tab1からtab2のdeptカラムに対して外部キーの追加をしてみました。
CREATE TABLE tab1(
emp_id varChar(10)
,emp_name varChar(100)
,dept varChar(10)
,age int
);
CREATE TABLE tab2(
dept varChar(10)
,dept_name varChar(100)
);
ALTER TABLE tab1 ADD FOREIGN KEY fk_dept(dept) REFERENCES tab2(dept);
この外部キーを削除しようとしたところ、次のようなエラーが出ました。
mysql> ALTER TABLE tab1 DROP FOREIGN KEY fk_dept;
ERROR 1091 (42000): Can't DROP 'fk_dept'; check that column/key exists
CREATE TABLE文で確認したところ制約名は別のものが付与されていました。
fk_deptではなく、tab1_ibfk_1となっていました。
mysql> SHOW CREATE TABLE tab1;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tab1 | CREATE TABLE `tab1` (
`emp_id` varchar(10) DEFAULT NULL,
`emp_name` varchar(100) DEFAULT NULL,
`dept` varchar(10) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
KEY `fk_dept` (`dept`),
CONSTRAINT `tab1_ibfk_1` FOREIGN KEY (`dept`) REFERENCES `tab2` (`dept`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.02 sec)
名前をtab1_ibfk_1に変更して削除すると問題なく削除できました。
mysql> ALTER TABLE tab1 DROP FOREIGN KEY tab1_ibfk_1;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0