Portál AbcLinuxu, 12. května 2025 16:37
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.