sql >> Database >  >> RDS >> Mysql

MySQL-beperking voor externe sleutels verdwijnt

Ter verduidelijking, dit is hoe de tabel eruit ziet nadat de externe sleutelbeperkingen zijn ingevoerd:

CREATE TABLE `leerplan_oefenreeks` (
  `leerplan_oefenreeks_id` int(11) NOT NULL AUTO_INCREMENT,
  `leerplan_id` int(11) NOT NULL,
  `oefenreeks_id` int(11) NOT NULL,
  `plaats` int(11) NOT NULL,
  PRIMARY KEY (`leerplan_oefenreeks_id`),
  KEY `fk_leerp_oefenr_leerplan` (`leerplan_id`),
  KEY `fk_leerp_oefenr_oefenreeks` (`oefenreeks_id`),
  CONSTRAINT `fk_leerp_oefenr_oefenreeks` FOREIGN KEY (`oefenreeks_id`) REFERENCES `oefenreeks` (`oefenreeks_id`) ON DELETE CASCADE,
  CONSTRAINT `fk_leerp_oefenr_leerplan` FOREIGN KEY (`leerplan_id`) REFERENCES `leerplan` (`leerplan_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

Let op de indexen fk_leerp_oefenr_leerplan en fk_leerp_oefenr_oefenreeks die mysql automatisch toevoegt.

Nadat u de eerste unieke sleutelbeperking heeft toegevoegd:

ALTER TABLE leerplan_oefenreeks ADD CONSTRAINT un_leerp_oefenr UNIQUE(leerplan_id, oefenreeks_id);

Mysql verwijdert de fk_leerp_oefenr_leerplan index omdat deze niet langer nodig is om de externe sleutelcontroles in de leerplan_id kolom te ondersteunen. Op dit moment ziet de tabel er als volgt uit:

CREATE TABLE `leerplan_oefenreeks` (
  `leerplan_oefenreeks_id` int(11) NOT NULL AUTO_INCREMENT,
  `leerplan_id` int(11) NOT NULL,
  `oefenreeks_id` int(11) NOT NULL,
  `plaats` int(11) NOT NULL,
  PRIMARY KEY (`leerplan_oefenreeks_id`),
  UNIQUE KEY `un_leerp_oefenr` (`leerplan_id`,`oefenreeks_id`),
  KEY `fk_leerp_oefenr_oefenreeks` (`oefenreeks_id`),
  CONSTRAINT `fk_leerp_oefenr_leerplan` FOREIGN KEY (`leerplan_id`) REFERENCES `leerplan` (`leerplan_id`) ON DELETE CASCADE,
  CONSTRAINT `fk_leerp_oefenr_oefenreeks` FOREIGN KEY (`oefenreeks_id`) REFERENCES `oefenreeks` (`oefenreeks_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

Om een ​​lang verhaal kort te maken, Sqlyog toont alleen de indexen in de boomstructuur aan de linkerkant, als je de buitenlandse sleutels wilt zien, selecteer dan de tabel in de boomstructuur en druk op F10.



  1. Nadat de partitie was verwijderd, werd de index onbruikbaar, wat moet ik doen,

  2. Waar slaat PostgreSQL de database op?

  3. Kunnen opgeslagen procedures een resultatenset retourneren?

  4. Tijd bijsnijden vanaf datetime - een vervolg