Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [SQL] on delete cascade (https://www.delphipraxis.net/31318-%5Bsql%5D-delete-cascade.html)

Luciano 7. Okt 2004 10:01


[SQL] on delete cascade
 
Hi

ich habe schon gegoogelt aber nicht wirklich etwas brauchbares gefunden um das zu verstehen...

Hat vielleicht jemand mal Beispiel oder einen Link wie das funktioniert, wenn ich mehrere Tabellen löschen will die in Abhängikeit voneinander sind?

Thx


Greets

Hansa 7. Okt 2004 11:51

Re: [SQL] on delete cascade
 
Beispiel : Warengruppen und Artikel. Die Artikel haben Warengruppe als Foreign-Key. Ist "ON DELETE CASCADE" definiert und ich lösche eine Warengruppe, so sind automatisch auch alle Artikel, die diese Warengruppe haben gelöscht.

Es können also keine undefinierten Felder entstehen. Natürlich ist äußerste Vorsicht geboten !!! Es gibt auch noch ON UPDATE CASCADE usw.

Luciano 7. Okt 2004 14:05

Re: [SQL] on delete cascade
 
Hi Hansa,

kannst du mir vielleicht Stück Quelltext zu dem geben was du geschrieben hast?

Wie sollte das denn aussehen? Die Theorie ist mir klar nur die passende Syntax fehlt mir dazu :oops:

Thx :thumb:


Greets

Hansa 7. Okt 2004 18:22

Re: [SQL] on delete cascade
 
Leider hast du nicht gesagt, welche DB du verwendest. Für IB/FB kann ich dir ein Bsp. geben.

Na gut, hier ist ein IB-Beispiel :

SQL-Code:
/******************************************************************************/
/****              Generated by IBExpert 07.10.2004 20:29:59               ****/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES ISO8859_1;

/******************************************************************************/
/****                                Tables                               ****/
/******************************************************************************/

CREATE TABLE ART (
    ID    INTEGER,
    ID_WG INTEGER,
    NR    INTEGER,
    BEZ   INTEGER
);

/******************************************************************************/
/****                             Foreign Keys                            ****/
/******************************************************************************/

ALTER TABLE ART ADD CONSTRAINT FK_ART FOREIGN KEY (ID_WG) REFERENCES WG8 (ID) ON DELETE CASCADE;


/******************************************************************************/
/****                              Privileges                             ****/
/******************************************************************************/
Ob dies sich jetzt 1:1 umsetzen läßt ?

Luciano 8. Okt 2004 07:11

Re: [SQL] on delete cascade
 
Hi Hansa,

ich benutze MS SQL Server 2000 und greife mit ADO darauf zu...

ich muß die "on delete cascade" Anweisung nach dem erstellen der Tabelle, der Tabelle mitgeben? :gruebel:

Ich dachte ich könnte das irgndwann zur Laufzeit machen... :?:
Etwa so...
SQL-Code:
SELECT * FROM TABLE1 
WHERE TABLE1_ID = TABLE2_TABLE1_ID
ON DELETE CASCADE

Greets

Jelly 8. Okt 2004 07:58

Re: [SQL] on delete cascade
 
@Mike:
Ein Delete Cascade hat nichts mit einer Select Anweisung zu tun, damit du das richtig verstehst. Es geht lediglich darum, wenn du einen Masterecord löscht, daß keinen Detailleichen übrig bleiben. Noch ein Beispiel: Eine Firma hat Kunden, und verkauft Artikel... Die Artikel gelangen auf die Rechnung... Somit hast du 3 Tabellen: Kunden, Artikel, Rechnungen.

Jetzt stell dir vor der Kunde X hat bereits 100 mal dort was gekauft, somit existieren hundert Einträge in der Tabelle Rechnungen, die auf den Kunden X verweisen. Was passiert nun, wenn du aus der Tabelle Kunden den Kunden X löschst. Da bietet dir MSSQL prinzipiell 2 Möglichkeiten:
  • Das Löschen des Kunden X wird unterbunden, da noch Rechungen auf den Kunden verweisen
  • Die Rechnungsinformationen werden gleich mitgelöscht: Und das nennt man Cascaded Deleting
Wie der Server agieren soll, legst du nicht bei einem "Delete" fest (und schon gar nicht bei einem Select, da dann eh nichts gelöscht wird), sondern in deinen Tabellendefinitionen von Kunden, Artikel und Rechnungen. Wie das geht, hat Hansa weiter oben ja bereits geschrieben.

PS: Nicht alle DBMS bieten verschachteltes Löschen an, aber MSSQL tuts.

Luciano 8. Okt 2004 10:51

Re: [SQL] on delete cascade
 
Hi Tom

Genau das ist das was ich wissen wollte :thumb: :thumb: :thumb: :thumb:
Jetzt ist mir das auch klar wie ich das machen muß!
Großen Dank


Greets :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz