sql >> Database teknologi >  >> RDS >> Mysql

mysql udenlandsk nøgle reference fra en sammensat nøgle

MySQL har en masse begrænsninger på fremmede nøgler . Blandt dem, der kan komme i vejen for dig. . .

  • Begge tabeller skal bruge INNODB-motoren.
  • "I referencetabellen skal der være et indeks, hvor fremmednøglekolonnerne er angivet som de første kolonner i samme rækkefølge."

Denne kode virker i min version (5.1.62).

create table DEP_FACULTY(
  LNAME varchar(50),
  FNAME varchar(50),
  EMAIL varchar(70) primary key
) ENGINE = INNODB;

insert into DEP_FACULTY values ('Gregor', 'Brandich', '[email protected]');

create table STUDENT(
  LNAME varchar(50),
  FNAME varchar(50),
  ID char(9) primary key,
  ASSIGNED_ADVISOR_EMAIL varchar(70),
  foreign key (ASSIGNED_ADVISOR_EMAIL) references DEP_FACULTY(EMAIL) ON DELETE SET NULL,
  IS_ADVISED tinyint(1)
) ENGINE = INNODB;

insert into STUDENT values ('Charmaine', 'DePeletier', 'cmd', '[email protected]', 1);

create table ADVISE_HIST(
  STUDENT_ID char(9),
  foreign key (STUDENT_ID) references STUDENT(ID),
  ACTUAL_ADVISOR_EMAIL char(70) NOT NULL,
  foreign key (ACTUAL_ADVISOR_EMAIL) references DEP_FACULTY(EMAIL),
  DATE_ADVISED date,
  primary key REF_ADVISE_HIST (STUDENT_ID, DATE_ADVISED)
) ENGINE = INNODB;

insert into ADVISE_HIST values ('cmd', '[email protected]', CURRENT_DATE);
insert into ADVISE_HIST values ('ctd', '[email protected]', CURRENT_DATE);

Af de sidste to indstik virker det første. Den anden skulle give en fejl med en fremmednøglebegrænsning.




  1. Fjern dubletter fra visning

  2. Tæl søgekriteriepost baseret på søgning udført af bruger (MYSQL PHP)

  3. Hvorfor returnerer Oracles to_timestamp_tz den forkerte tid og/eller tidszone?

  4. Ekstern MySQL-forbindelse i PHP