Toon posts:

[MySQL] InnoDB Foreign / Primary key vreemd gedrag

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een wat vreemd gedrag gemerkt toen ik een ER modelletje had gemaakt in DBDesigner4 en dit "Create script" dat hieruit kwam wilde draaien in MySQL.

Ten eerste heb ik deze tabel:
code:
1
2
3
4
5
6
7
8
9
10
CREATE TABLE s_gebruiker (
  loginNaam VARCHAR(15) NOT NULL,
  isAdministrator BIT NOT NULL,
  startDatum DATETIME NULL,
  eindDatum DATETIME NULL,
  isPersoon INTEGER(11) NULL,
  PRIMARY KEY(loginNaam),
  INDEX NONCLUSTERED(loginNaam)
)
TYPE=InnoDB;
Maar dan deze:

Deze werkt niet:Deze werkt wel:

code:
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE s_sessie (
  aanmeldTijd DATETIME NOT NULL,
  loginNaam VARCHAR(15) NOT NULL,
  afmeldTijd DATETIME NULL,
  PRIMARY KEY(aanmeldTijd, loginNaam),
  FOREIGN KEY(loginNaam)
    REFERENCES s_gebruiker(loginNaam)
      ON DELETE CASCADE
      ON UPDATE CASCADE
)
TYPE=InnoDB;


code:
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE s_sessie (
  aanmeldTijd DATETIME NOT NULL,
  loginNaam VARCHAR(15) NOT NULL,
  afmeldTijd DATETIME NULL,
  PRIMARY KEY(aanmeldTijd, loginNaam),
  FOREIGN KEY(loginNaam)
    REFERENCES s_gebruiker(loginNaam)
      ON DELETE CASCADE
      ON UPDATE CASCADE
)
TYPE=BDB;


Ik zal het maar vertellen, het gaat om het type ;) . Ik krijg een Error nummertje 1050, wat betekent dat er iets met de foreign key constraints mis is.

Ik wil dus transactie ondersteunende tabellen, maar het liefst innoDB omdat deze op rij niveau lockt en BDB op page niveau.

Ik heb wat zitten knutselen hiermee en het lijkt alsof bij innoDB een Foreign key meteen ook primary key moet zijn en niets anders.

Heb ik hier nu een bug gevonden???
Kan me niet voorstellen dat dit ontworpen functionaliteit is...

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 19-05 09:52

thomaske

» » » » » »

Je moet volgens mij een index aanmaken op het veld wat je FK is

dus iets van:

code:
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE s_sessie (
  aanmeldTijd DATETIME NOT NULL,
  loginNaam VARCHAR(15) NOT NULL,
  afmeldTijd DATETIME NULL,
  PRIMARY KEY(aanmeldTijd, loginNaam),
  KEY(loginNaam),
  FOREIGN KEY(loginNaam)
    REFERENCES s_gebruiker(loginNaam)
      ON DELETE CASCADE
      ON UPDATE CASCADE
) TYPE=InnoDB;

[ Voor 74% gewijzigd door thomaske op 28-10-2004 23:21 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

Topicstarter
Inderdaad zeg.

Ik kan met dat DBDesigner alleen niet zomaar nietszeggende KEY's maken, maar een index werkt ook. In dit geval niet eens zo'n slecht idee ook, om de zoekacties wat te versnellen... :)

Top!

Ik ben wat verder gaan kijken in die tool en 1 van de opties daarvan is:

"Automatically create Index on FK Fields in Destination Table if Reference Definition is activated for the Relation (for InnoDB)"

Waarschijnlijk toch een bekend iets dus...

[ Voor 4% gewijzigd door Verwijderd op 29-10-2004 00:03 ]