Referenzielle Integrität mit MySql

12/02/2010 - 20:56 von Matthias Fitzner | Report spam
Hallo NG,

Ich habe lange mit Access rum gemacht. Von daher ist mir die
Referenzielle Integritàt zur Datenintegritàt ein wichtiges
Steuerungswerkzeug.

Nun habe ich mir mal ein paar meiner Tabellen nach MySql 5.1 (Bullzip MS
Access to MySQL) portiert.
Vorher mußte ich Autowerte in Long àndern und Beziehungen löschen.

Nach der Portierung habe ich die Tabellen mit
'ALTER TABLE tabelle ENGINE = INNODB;'
und mit MySQL Workbench 5.1 Beziehungen über den foreign key wieder
hergestellt.

Dann die Tabellen via ODBC in Access 2002 verknüpft.

Aber keine der Einstellungen On Update noch On Delete: Restrikt,
Cascade, Set Null zeigen Wirkung. Beim Löschen/Ändern von Daten in der
Mastertabelle werden in der Childtabellen keine Daten gelöscht/geàndert.

Was mache ich falsch?


Gruß Mafi
 

Lesen sie die antworten

#1 Philipp Stiefel
13/02/2010 - 16:49 | Warnen spam
On Fri, 12 Feb 2010 20:56:12 +0100, Matthias Fitzner wrote:

Ich habe lange mit Access rum gemacht. Von daher ist mir die
Referenzielle Integritàt zur Datenintegritàt ein wichtiges
Steuerungswerkzeug.

Nun habe ich mir mal ein paar meiner Tabellen nach MySql 5.1 (Bullzip MS
Access to MySQL) portiert.
Vorher mußte ich Autowerte in Long àndern und Beziehungen löschen.

Nach der Portierung habe ich die Tabellen mit
'ALTER TABLE tabelle ENGINE = INNODB;'
und mit MySQL Workbench 5.1 Beziehungen über den foreign key wieder
hergestellt.

Dann die Tabellen via ODBC in Access 2002 verknüpft.

Aber keine der Einstellungen On Update noch On Delete: Restrikt,
Cascade, Set Null zeigen Wirkung. Beim Löschen/Ändern von Daten in der
Mastertabelle werden in der Childtabellen keine Daten gelöscht/geàndert.



Wo konkret dein Problem liegt, weiß ich nicht, aber hier ein paar Dinge,
die du beachten könntest:

Sowohl die Mastertabelle als auch Childtabelle müssen InnoDB-Tabellen
sein! Ich gebe ie Engine übrigens immer schon im Create Table Statement an.

Die vereinfachte Syntax mit "felddefinition References msterTbl(Feld)" im
Create Table Statement reicht nicht aus, um einen echten Foreign Key zu
erzeugen! Du muss den volle FOREIGN KEY-Sermon schreiben. Besonders bei
Migrationsprojekten würde ich die Foreign Keys sowieso erst spàter über ein
ALTER TABLE ... ADD CONSTRAINT erzeugen. Dann kann man sie nàmlich spàter,
nachdem alle Daten migriert erzeugen.

Die Aktualisierungs-/Löschweitergabe mit On Update/On Delete habe ich nie
ausprobiert, aber die harte Foreign-Key-Integritàtsprüfung mit einem Error
funktioniert einwandfrei mit InnoDB.

Gruß
Philipp

Ähnliche fragen