2016-07-29 2 views
-1

ich eine Kategorie TischPrevent Deletion von Eltern, wenn das Kind Datensatz vorhanden

CREATE TABLE `tbl_categories` (
    `id` int(11) NOT NULL, 
    `name` varchar(100) NOT NULL DEFAULT '0', 
    `parent_id` int(11) NOT NULL DEFAULT '0' 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

haben und dies ist, wie es zeigt Kategorien mit Unterkategorien Nach der Ausführung

enter image description here

Ich brauche Löschung zu verhindern Eltern-Datensatz, wenn es einen oder mehrere untergeordnete Datensätze hat. Wie mache ich es?.

+1

Warum nicht ein Fremdschlüssel? – berty

+0

@berty, wo füge ich den Fremdschlüssel hinzu? –

+0

@Marc B beantworten;) – berty

Antwort

4

Sie könnten einen selbstbezogenen Fremdschlüssel haben, aber Sie haben es in zwei Stufen zu erstellen:

create table foo (
    id int not null auto_increment primary key, 
    parent int default null 
); 

alter table foo add foreign key (parent) references foo (id) 
    on delete restrict; 

Sie haben es als separates alter zu tun, weil es nicht in der Tabelle arbeiten Definition selbst - die Tabelle existiert zu diesem Zeitpunkt nicht, so dass die FK-Verifizierung fehlschlägt und die Erstellung der Tabelle nicht zulässt.

+0

Danke, das war das Wort, nach dem ich suchte, "selbstreferenzieller Fremdschlüssel". Ich war mir nicht sicher, ob ich einen selbstreferentiellen Fremdschlüssel definieren könnte. Lass es mich versuchen. –