Cannot drop index ‘pid’: needed in a foreign key constraint
Error and Structure of table:
MariaDB [test]> desc c1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| cid | int(11) | NO | PRI | NULL | |
| pid | int(11) | YES | MUL | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.044 sec)
MariaDB [test]> show index from c1;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Ignored |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| c1 | 0 | PRIMARY | 1 | cid | A | 3 | NULL | NULL | | BTREE | | | NO |
| c1 | 1 | pid | 1 | pid | A | 3 | NULL | NULL | YES | BTREE | | | NO |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
2 rows in set (0.024 sec)
MariaDB [test]> drop index pid on c1;
ERROR 1553 (HY000): Cannot drop index 'pid': needed in a foreign key constraint
Solution: Rebuild the index by disabling foreign key at the database level.
MariaDB [test]> SET foreign_key_checks = 0;
Query OK, 0 rows affected (0.008 sec)
MariaDB [test]> DROP INDEX `pid` ON c1;
Query OK, 0 rows affected (0.054 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [test]> CREATE INDEX `pid` ON c1(`pid`);
Query OK, 0 rows affected (0.088 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [test]> SET foreign_key_checks = 1;
Query OK, 0 rows affected (0.000 sec)
Note: Please lock the table, so that during rebuild operation no one inserts or uses the table.
-- Lock the table
LOCK TABLES table_name WRITE;
-- unlock the table:
UNLOCK TABLES;
-- Check the use of table or lock
show open tables