View Single Post

  #6 (permalink)  
Old 04-17-2007
Vojta
 
Posts: n/a
Default Re: Organisation tree - prevent deletion of parent organisation

Thank you all for your answers!

I tested foreign key:

CREATE TABLE MemberTree (
Id INT UNSIGNED NOT NULL AUTO_INCREMENT,
ParentId INT UNSIGNED ZEROFILL,
Name VARCHAR(50) NOT NULL UNIQUE,
CONSTRAINT PK_MemberTree_1 PRIMARY KEY (Id)
) ENGINE = InnoDB;

ALTER TABLE MemberTree ADD CONSTRAINT C_MemberTree_1
FOREIGN KEY (ParentId) REFERENCES MemberTree(Id) ON DELETE CASCADE; (*)

(*) I wanted to use CHECK to prevent deletion if there are some children but
I learned CHECK statement is ignored though parsed.

Now the test:

INSERT INTO MemberTree VALUES(NULL, NULL, 'Member A');
INSERT INTO MemberTree VALUES(NULL, 1, 'Member A.A');
SELECT * FROM MemberTree;

Id ParentId Name
--------------------------------
1 null 'Member A'
2 1 'Member A.A'

DELETE FROM MemberTree WHERE Id = 1;
SELECT * FROM MemberTree;

All records deleted.

So it does not work, may be it should be done somehow else. Can you please
advice how?




"subtenante" <zzsubtenantezz@gmail.com> píse v diskusním príspevku
news:231923l862pjr07iuu2r6i9melda4dgfar@4ax.com...
> On Tue, 17 Apr 2007 09:15:05 +0100, "Sean"
> <sean.anderson@[nospam]oakleafgroup.biz> wrote:
>
>>On your delete statements you could have:
>>
>>DELETE FROM ORGANISATIONS
>>WHERE ID NOT IN
>>(
>> SELECT PARENTID
>> FROM ORGANISATIONS
>>)
>>AND ID = n
>>
>>Sean

>
> Well, adding a FOREIGN KEY constraint on parentid (foreign key on the
> id primary key column), might work better and without having to do
> tricks in the delete statements : if you try to delete a row with an
> id used as parentid somewhere, you will have a constraint failure and
> the delete will not proceed.



Reply With Quote