it-swarm.com.de

Spalte kann nicht gelöscht werden: Wird in einer Fremdschlüsseleinschränkung benötigt

Ich habe eine Tabelle mit zwei Fremdschlüsseleinschränkungen wie folgt:

mysql> SHOW CREATE TABLE `user`;

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `region_id` int(11) unsigned DEFAULT NULL,
  `town_id` int(11) unsigned DEFAULT NULL,
  `fullname` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `username` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `password` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `active` tinyint(1) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `FK_G38T6P7EKUXYWH1` (`region_id`),
  KEY `FK_J8VWK0ZN7FD2QX4` (`town_id`),
  CONSTRAINT `FK_G38T6P7EKUXYWH1` FOREIGN KEY (`region_id`) REFERENCES `region` (`id`) ON UPDATE NO ACTION,
  CONSTRAINT `FK_J8VWK0ZN7FD2QX4` FOREIGN KEY (`town_id`) REFERENCES `town` (`id`) ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

Ich kann keine Fremdschlüsselspalte löschen, obwohl ich FOREIGN_KEY_CHECKS Deaktiviere.

mysql> ALTER TABLE `user` DROP COLUMN `region_id`;
1553 - Cannot drop index 'FK_G38T6P7EKUXYWH1': needed in a foreign key constraint

mysql> SHOW VARIABLES LIKE 'FOREIGN_KEY%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| foreign_key_checks | ON    |
+--------------------+-------+
1 row in set

mysql> SET FOREIGN_KEY_CHECKS = 0;
Query OK, 0 rows affected

mysql> SHOW VARIABLES LIKE 'FOREIGN_KEY%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| foreign_key_checks | OFF   |
+--------------------+-------+
1 row in set

mysql> ALTER TABLE `user` DROP COLUMN `region_id`;
1828 - Cannot drop column 'region_id': needed in a foreign key constraint 'FK_G38T6P7EKUXYWH1'
5
Sithu

Ein Blick auf MySql docs Ich habe eine Warnung zu foreign_key_keys:

Warnung
Mit Foreign_key_checks = 0 versetzt das Löschen eines für eine Fremdschlüsseleinschränkung erforderlichen Index die Tabelle in einen inkonsistenten Zustand und führt dazu, dass die beim Laden der Tabelle auftretende Fremdschlüsselprüfung fehlschlägt. Um dieses Problem zu vermeiden, entfernen Sie die Fremdschlüsseleinschränkung, bevor Sie den Index löschen (Fehler # 70260).

IMHO sollten Sie den AUSLÄNDISCHEN SCHLÜSSEL fallen lassen, bevor Sie die SPALTE TROPFEN.

ALTER TABLE `user` DROP FOREIGN KEY `FK_G38T6P7EKUXYWH1`;
ALTER TABLE `user` DROP COLUMN `region_id`;

Ich habe ein Rextester-Beispiel eingerichtet. Überprüfen Sie es hier .

11
McNets