Ahoj, mám dotaz. Od kdy je povinné mít v tabulce unikátní klíč a proč? Díky ;)
Fórum › MySQL
Povinný unikátní klíč
#2 peter
Tudíž já nemůžu nijak ručně upravovat záznamy a to mě štve ...
pravda.. jde proste o to ze mysql to tam mit nemusi.. za to phpMySql ocividne ano - ale beztak neni spatny mit klic nad sloupcem, podle ktereho vyhledavas - je to minimalne rychlejsi, kdyz tam je vetsi tabulka
nejspis tam mas uz duplikatni uzivatelsky jmena - minimalne databaze musi rict, co se ji nelibi
jinak by melo fungovat neco jako CREATE UNIQUE INDEX ma_uname_idx ON main_account (mbusername);
A to mě ještě děsí představa, že budu muset upravit všechny INSERT INTO příkazy, protože tam, kde nemám ID (což je ve všech tabulkách kromě jedné), používám:
INSERT INTO tabulka VALUES('hodnota1', 'hodnota2', ...);
Místo:
INSERT INTO tabulka (sloupec1, sloupec2, ...) VALUES('hodnota1', 'hodnota2', ...);
Jakmile bych tam přidal klíč, tak musím použít ten druhý způsob, jelikož to začne zapisovat od začátku ...
no na to se da argumentovat jen "neudrzitelny kod" - dobry tak mozna pro placani na koleni neceho, co pak doufejme zase brzo upadne v zapomeni :)
furt muzes jeste ten unikatni klic nahodit na mbusername, jak sem psal par prispevku nazpet... tim tam mas unikatni klic, nestane se, ze budes mit nekolik uzivatelu se stejnym jmenem a muzes vesele mazat v phpMyAdminu
Proc bys musel upravovat vsechny INSERTy? autoincrement sloupec se sam zvysuje pridanim noveho radku, jeho hodnotu nemusis do dotazu uvadet. A jak uz bylo receno, mazani zaznamu podle id (rekneme 3 znaky po 255) je rychlejsi nez vyhlevadani retezce (32 znaku po 255).
A ta hlaska mimochodem znamena, ze funkce Edit, Delete, zaskrtavaci policka phpmyadmina nelze pouzit, protoze je nemuze propojit s unikatnim zaznamem. Navic je to oznacene jako varovani, vykricnik ve zlutem trojuhelnicku ne cervenem. Priklad:
name, psw
Alois, Alois - radek1
Alois, Alois - radek2
SELECT * FROM tabulka WHERE name='Alois' AND psw='Alois'
To vrati 2 radky, takze, kdyby tam dal zaskrtavatko a ty jsi chtel smazat jen jeden radek, tak by to neslo, protoze cisla radku se nikde neukladaji. Predpokladam, ze ani slozity dotaz s AND to v sobe nema zabudovane, protoze to nechce riskovat.
Takovyto druh tabulky pouzivam treba pro banovani, kde mam sloupce: id_uzivatel, ip, poznamka. Vetsinou ale nastavuji id_uzivatele jako unikatni.
#15 peter
Proč bych musel upravovat INSERTy? No protože když mi KIV napsal, ať tam přidám AUTOINCREMENT, tak by to vypadalo takto:
Budu mít třeba dva sloupce nick, heslo a provedu příkaz
INSERT INTO tabulka VALUES('peter', 'superheslo');
To je ok. Ve chvíli, kdy ale přidám na začátek id s AUTOINCREMENT a budu mít tedy sloupce id, nick, heslo a zadám stejný příkaz
INSERT INTO tabulka VALUES('peter', 'superheslo');
Tak se mi přece hodnota nicku narve do sloupce id ...
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Klíč na MylSAM a InnoDB — založil Davidkopecky
KeyError (klíč s diakritikou) — založil Michal
Unikatni hodnota — založil Earl Cash
Jak přečíst privátní klíč? — založil Honza
Navrh DB ve 3NF - slozeny klic — založil HellMaster
Moderátoři diskuze