🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych
Article #183487

Re: Zapytanie... MySQL / InnoDB / wewnetrzny FOREIGN KEY

#183487
From: Krzysztof Jamróz
Date: Tue, 14 Jul 2009 19:16
47 lines
2884 bytes
Dnia Tue, 14 Jul 2009 03:32:15 -0700 (PDT), beherit napisał(a):

> Mam problem z tabelką...
> 
> CREATE TABLE `objects` (
>   `objectId` int(10) unsigned NOT NULL,
>    [...ciach-smieci...]
>   `objectParentId` int(10) unsigned DEFAULT NULL,
>   PRIMARY KEY (`objectId`),
>   KEY `objectParentId` (`objectParentId`)
> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci
> ROW_FORMAT=COMPACT;
> i takim ograniczeniem:
> ALTER TABLE `objects`
>   ADD CONSTRAINT `objectsParentId_to_objectId` FOREIGN KEY
> (`objectParentId`) REFERENCES `objects` (`objectId`) ON DELETE SET
> NULL ON UPDATE CASCADE;
> 
> Często rzeczy SZBD robię na zewnątrz w swojej aplikacji, ale teraz
> chcę jak najwięcej wrzucić do SZBD i na moją logikę przy aktualizacji
> objectId odwołania w objectParentId powinny się aktualizować... ale
> pojawia się problem:
> Dla polecenia:
>  UPDATE `teleitcms`.`objects` SET `objectId` = '22' WHERE
> `objects`.`objectId` =1 LIMIT 1;
> dostaję:
> #1451 - Cannot delete or update a parent row: a foreign key constraint
> fails (`teleitcms`.`objects`, CONSTRAINT `objectsParentId_to_objectId`
> FOREIGN KEY (`objectParentId`) REFERENCES `objects` (`objectId`) ON
> DELETE SET NULL ON UPDATE CASCADE)
> 
> A może mam gdzieś błąd?

Dokumentacja MySQL'a mówi tak:

If ON UPDATE CASCADE or ON UPDATE SET NULL recurses to update the same
table it has previously updated during the cascade, it acts like RESTRICT.
This means that you cannot use self-referential ON UPDATE CASCADE or ON
UPDATE SET NULL operations. This is to prevent infinite loops resulting
from cascaded updates. A self-referential ON DELETE SET NULL, on the other
hand, is possible, as is a self-referential ON DELETE CASCADE. 
(http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html)

A ja jeszcze zadam pytanie: po co chcesz aktualizować klucz główny?

-- 
Krzysztof Jamróz
Technical Details
Message-ID: <adxjqolf8q9i$.13nnurqrfcanz$.dlg@40tude.net>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
References: <613c8429-88eb-4ee7-8b7f-25adbc166913@o13g2000vbl.googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
From: Krzysztof Jamróz <SpAMkrzyh000JeST@ZLYo2.pl>
Newsgroups: pl.comp.bazy-danych
Subject: Re: Zapytanie... MySQL / InnoDB / wewnetrzny FOREIGN KEY
Date: Tue, 14 Jul 2009 21:16:13 +0200
Organization: TP - http://www.tp.pl/
Lines: 47
Message-ID: <adxjqolf8q9i$.13nnurqrfcanz$.dlg@40tude.net>
References: <613c8429-88eb-4ee7-8b7f-25adbc166913@o13g2000vbl.googlegroups.com>
NNTP-Posting-Host: cls217.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
X-Trace: nemesis.news.neostrada.pl 1247599563 8838 83.31.120.217 (14 Jul 2009 19:26:03 GMT)
X-Complaints-To: usenet@news.neostrada.pl
NNTP-Posting-Date: Tue, 14 Jul 2009 19:26:03 +0000 (UTC)
User-Agent: 40tude_Dialog/2.0.15.1pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit