Foreign Keys mit MySQL InnoDB Tabellen

InnoDB Tabellen unterstützen seit Version 4.0 Foreign Keys.
Nun läst sich endlich auch in MySQl referentielle Integrität auf DB Ebene herstellen.
Allerdings erkauft man sich dies mit dem InnoDB Tabellen Typ dessen Performance deutlich unter den MyISAM Tabellen liegt!


Die Allgemeine Syntax lautet:
 
[CONSTRAINT symbol] FOREIGN KEY (index_col_name, ...)
                  REFERENCES table_name (index_col_name, ...)
                  [ON DELETE CASCADE | ON DELETE SET NULL]

Es gibt zwei Möglichkeiten Foreign Key Constrains einzusetzen.
Zum einem beim CREATE TABLE zum anderem beim ALTER TABLE
z.B:  

# CREATE
# PARENT TABLE
CREATE TABLE `autor` (
  `id` int(10)  NOT NULL ,
  `name` varchar(128) NOT NULL default '',
  PRIMARY KEY  (`id`),
  KEY `NAME` (`name`)
) TYPE=InnoDB;

# CHILD TABLE
CREATE TABLE `buch` (
  `id` int(10)  NOT NULL,
  `autor_id` int(10)  NOT NULL ,
  PRIMARY KEY  (`id`),
  INDEX idx_autor_id (autor_id),
  FOREIGN KEY (autor_id) REFERENCES autor(id) ON DELETE CASCADE 
) TYPE=InnoDB  

#ALTER
ALTER TABLE buch
ADD CONSTRAINT FK_Buch (autor_id) REFERENCES autor(id) ON DELETE CASCADE 
;
Es lassen sich folgende Verhalten beim löschen [ON DELETE] bzw. (seit 4.0.7) update [ON UPDATE] definieren.

z.B.:
 
  ON DELETE SET NULL
  ON DELETE CASCADE

Entsprechend den Verhaltenseinstellungen müssen die Attribute (z.B. autor_id) entsprechende Datentypen/Eigenschaften haben (NOT NULL/NULL)

Weiter Möglichkeiten PHP & MySQL Transaktionen

 

 
© 2001 by  tbee / Impressum last update at: 14.05. 2003 22:05:07
url: www.tbee.de/mysql/t5_mysql_foreignkey.php