Schrift
[thread]3625[/thread]

Funktioniert dieses ON DELETE?



<< >> 6 Einträge, 1 Seite
mordur
 2005-09-28 11:51
#33640 #33640
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
moins,

ich möchte erreichen, das alle Datensätze automatisch aus einer Tabelle gelöscht werden, die durch einen Schlüssel auf einen Datensatz x in einer anderen Tabelle referenziert sind, wenn dieser Datensatz x gelöscht wird. Datenbank ist MySQL 4.0.18.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#Tabelle eins mit Primärschlüssel 'zahl'
create table eins ....
...
primary key zahl)...


# Tabelle zwei enthält den Schlüssel 'zahl' aus Tabelle eins
create table zwei...

....
REFERENCES eins (zahl) ON DELETE


Jedesmal wenn jetzt ein Datensatz aus Tabelle eins gelöscht wird sollen alle durch 'zahl' referenzierten Datensätze in Tabelle zwei automnatisch auch gelöscht werden. Ist der Ansatz so richtig? Mir ist die Syntax irgendwie nicht so klar. Oder muss das 'REFERENCES' in das CREATE für Tabelle eins und auf zwei verweisen? Wär nett wenn jemand ein hübsches Beispiel hätte. Funktioniert das auch mit MyISAM-typ oder muss InnoDB verwendet werden?

gruß mordur
renee
 2005-09-28 12:00
#33641 #33641
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du hast noch die "FOREIGN KEY"-Anweisung vor dem "REFERENCES" vergessen, sonst ist das korrekt. Dafür musst Du die InnoDB benutzten (siehe http://dev.mysql.com/doc/mysql/en/ansi-diff-foreign-keys.html )
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
mordur
 2005-09-28 12:40
#33642 #33642
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
prima das funzt
mordur
 2005-09-29 18:54
#33643 #33643
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
moins,

nun habe ich folgendes:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE reviewing
(
reviewingid INTEGER ,
papername char(1),
reviewername text,
PRIMARY KEY(reviewingid,papername)
);

CREATE TABLE score
(
reviewingid integer,
papername char(1),
questionnumber integer,
score integer,
FOREIGN KEY (reviewingid,papername) REFERENCES reviewing (papername,reviewingid) on delete cascade
);

Man sieht das in der FOREIGN KEY- Klausel bei der Referenz auf die andere Tabelle die Schlüssel vertauscht wurden in der Reihenfolge. Ist das ok? Kann man auch die F-Keys selber in beliebiger reihenfolge angeben? Ist es Hauptsache wichtig, dass die Namen identisch sind oder muss generell auch die Reihenfolge ihrer Erstellung beachtet werden?
renee
 2005-09-30 09:37
#33644 #33644
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da die Namen in score und in reviewing nicht gleich sein müssen, kommt es auf die Reihenfolge an. Also nicht beim CREATE, sondern bei FOREIGN KEY und REFERENCES muss die Reihenfolge gleich sein...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
mordur
 2005-09-30 10:25
#33645 #33645
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
ok, danke.
<< >> 6 Einträge, 1 Seite



View all threads created 2005-09-28 11:51.