sql >> Databáze >  >> RDS >> Mysql

MySQL PRIMARY KEY vs UNIQUE omezení

V úvodu si uvědomte, že primární klíč nemusí být jeden sloupec:může se skládat z více sloupců:toto je známé jako složený klíč. Všimněte si také, že ne každá tabulka má AUTO_INCREMENT /IDENTITY sloupec vůbec a můžete mít UNIQUE omezení na jeden sloupec uvnitř složeného klíče.

  1. Žádný neexistuje – ale pro DBMS to nedává smysl zakazovat taková redundance buď proto, že byste potřebovali dodatečnou logiku a složitost, abyste zvládli tuto podmínku, zatímco obojí nezpůsobí žádnou skutečnou škodu (kromě dopadu na výkon v podobě nutnosti udržovat dva indexy).

  2. Jak bylo řečeno výše:protože náklady na příležitost detekce a prevence této redundance za to nestojí.

Další věc, kterou je třeba zvážit, je, že definice primárního klíče tabulky není neměnná, a proto se může změnit. Tabulka již může obsahovat sloupce s UNIQUE nastavení omezení a poté se návrhář databáze rozhodne toto zahrnout do nové definice primárního klíče – bylo by uživatelsky nepřívětivé vyžadovat nejprve odstranění starého omezení, zvláště pokud jiné části jejich aplikačního systému závisí na že existuje UNIKÁTNÍ omezení (např. 1:0..1 definice vztahu).

(Také AUTO_INCREMENT není vzájemně zahrnuto s UNIQUE nebo PRIMARY KEY :můžete použít AUTO_INCREMENT s nejedinečnými sloupci (např. pokud AUTO_INCREMENT je přidán za tabulku, která již obsahuje data) a naopak PRIMARY KEY může používat jedinečné hodnoty získané odjinud, například jiný sloupec identity jako cizí klíč (složené primární klíče mohou obsahovat cizí klíče!) nebo „přirozený“ zdroj dat, jako je použití čísla sociálního pojištění v USA jako primárního klíče (samozřejmě neměli byste nikdy udělejte to ve skutečnosti)).




  1. Exportujte data SQL do .csv a generujte samostatné soubory .csv pro každou tabulku na základě dotazu

  2. pymssql.OperationalError:Chybová zpráva DB-Lib 20009, závažnost 9

  3. Jak získat poslední záznam v každé skupině v MySQL

  4. Jak přečtu tento textový soubor a vložím jej do MySQL?