Portál AbcLinuxu, 10. listopadu 2025 02:21
uzivatele: uid, nazev, typ, .... (uid je primarni klic a nazev je unikatni) opravneni: admin_nazev, admin_cil, muze_cist, aktualizovano.... (admin_nazev je cizi klic uzivatele(nazev) a admin_cil je cizi klic uzivatele(uid)(mimochodem 2 cizí klíče na 2 různé unikátní hodnoty v tab. oprávnění nejsou chyba návrhu, ale chyba mysql, kter8 neumožňuje odkazovat dvěma sloupci stejné tabulky na jeden v jiné (minimálně nefunguje CASCADE update))
CREATE TABLE `uzivatele` (
`uid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`nazev` VARCHAR(255) NOT NULL,
`typ` ENUM('admin','user') NOT NULL DEFAULT 'user',
PRIMARY KEY (`uid`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
CREATE TABLE `opravneni` (
`oid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`uid1` INT(10) UNSIGNED NOT NULL,
`uid2` INT(10) UNSIGNED NOT NULL,
`muze_cist` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`oid`),
INDEX `fk2` (`uid2`),
INDEX `fk1` (`uid1`),
CONSTRAINT `fk2` FOREIGN KEY (`uid2`) REFERENCES `uzivatele` (`uid`) ON UPDATE CASCADE,
CONSTRAINT `fk1` FOREIGN KEY (`uid1`) REFERENCES `uzivatele` (`uid`) ON UPDATE CASCADE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
V tabulke "opravneni" mam dva stlpce (uid1, uid2) ktore obidva odkazuju cez cudzi kluc na jeden a ten isty stlpec v tabulke "uzivatele" (uid). Dokonca aj ten UPDATE CASCADE funguje...ked zmenim uid nejakeho zaznamu v tabulke "uzivatele" tak sa zmeni aj v tabulke "opravneni"...
INSERT INTO `opravneni` (`uid1`, `uid2`, `muze_cist`) VALUES (3, 3, 1);Zmena uid v tabulke "uzivatele" (z 3 na 4):
UPDATE `uzivatele` SET `uid`=4 WHERE `uid`=3 LIMIT 1;Ziadna chyba, kaskada sa vykonala a v tabulke "opravneni" sa uid zmenili z 3 na 4.
DELETE FROM `uzivatele` WHERE `uid`=4 LIMIT 1;Ziadna chyba, kaskada sa vykonala a zmazal sa zaznam aj v tabulke "opravneni"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.