MySQL a unikátní sloupce

Marie

MySQL a unikátní sloupce
« kdy: 10. 01. 2018, 16:50:30 »
Ahoj.
Umí MySQL nastavit unikátní i něco jiného, nebo umí pouze samostatný jeden sloupec? Dík. M.


gll


Marie

Re:MySQL a unikátní sloupce
« Odpověď #2 kdy: 10. 01. 2018, 17:41:46 »
No, mě se spíš jedná o to, aby nešel zapsat duplicitní řádek, aby v mysql nešlo uložit něco jako

Kód: [Vybrat]
id name val
1  aaa   10
2  aaa   10
3  aaa   10

ale může tam být
Kód: [Vybrat]
1  aaa   10
2  aaa   20
3  aaa   30
nebo i
Kód: [Vybrat]
1  aaa   10
2  bbb   10
3  ccc   10

Kit

Re:MySQL a unikátní sloupce
« Odpověď #3 kdy: 10. 01. 2018, 17:49:32 »
Kód: [Vybrat]
CREATE TABLE t1 (
    id SERIAL,
    name DATE NOT NULL,
    val INT NOT NULL,
    UNIQUE KEY (name, val)
);

Re:MySQL a unikátní sloupce
« Odpověď #4 kdy: 10. 01. 2018, 17:49:45 »
To není dotaz na MySQL, ale na základy relačních databází.

Ta odpověď od gll je správně a unikátním indexem nad sloupci name a val docílíte přesně toho, co popisujete.


Marie

Re:MySQL a unikátní sloupce
« Odpověď #5 kdy: 10. 01. 2018, 18:17:16 »
Děkuji.  :)

Kit

Re:MySQL a unikátní sloupce
« Odpověď #6 kdy: 10. 01. 2018, 18:27:54 »
To není dotaz na MySQL, ale na základy relačních databází.

Ta odpověď od gll je správně a unikátním indexem nad sloupci name a val docílíte přesně toho, co popisujete.

V odkazu, který poslal gll, není nic o unikátních indexech. Přesto mu to nemám za zlé.

Otázka byla položena správně. Dva jsme odpověděli, třetí si zatrolil.

gll

Re:MySQL a unikátní sloupce
« Odpověď #7 kdy: 10. 01. 2018, 18:46:19 »
Index a key jsou v mysql synonyma.

Kit

Re:MySQL a unikátní sloupce
« Odpověď #8 kdy: 10. 01. 2018, 19:01:40 »
Index a key jsou v mysql synonyma.

Index nemusí být unikátní. Požadavek však byl na unikátní dvojici, na což se místo B-tree používá hash. Používá snad MySQL v obou případech B-tree?

gll

Re:MySQL a unikátní sloupce
« Odpověď #9 kdy: 10. 01. 2018, 19:11:59 »
máš pravdu, není to tam. Odkaz jsem nečetl, vzal jsem první výsledek z googlu.

Re:MySQL a unikátní sloupce
« Odpověď #10 kdy: 10. 01. 2018, 19:25:20 »
V odkazu, který poslal gll, není nic o unikátních indexech. Přesto mu to nemám za zlé.
Vždyť jsem psal, že jeho odpověď je správně. Podle dotazu Marie už o unikátních indexech něco zaslechla, ale nevěděla, že je možné vytvořit index nad více sloupci.

Otázka byla položena správně.
Otázka byla položena správně, to jsem nezpochybňoval – ale svědčí o tom, že Marie nezná ani základy relačních databází. Na tom není vůbec nic špatného, každý někdy začínal – ale tyhle znalosti se nedají získat dotazováním se na diskusních fórech. Je potřeba nejprve získat nějaké základní penzum znalostí a hlavně celkový přehled – a teprve pak se něco dozvím, když se budu ptát na konkrétní detaily.

Omlouvám se, pokud má první odpověď zněla příliš příkře. Byla to dobře míněná rada, že to není dotaz na nějaký implementační detail MySQL, ale že pokud chce Marie jakkoli pracovat s databází, bude potřebovat naučit se základy relačních databází.

Dva jsme odpověděli, třetí si zatrolil.
První, kdo tu trolí, jste vy.

Kit

Re:MySQL a unikátní sloupce
« Odpověď #11 kdy: 10. 01. 2018, 19:47:09 »
Dva jsme odpověděli, třetí si zatrolil.
První, kdo tu trolí, jste vy.

Netrolil jsem, ale odpověděl na dotaz. Tak se laskavě koukni do zrcadla. Žádnou relevantní odpověď jsi nenapsal, jen trolíš.

Re:MySQL a unikátní sloupce
« Odpověď #12 kdy: 10. 01. 2018, 20:09:57 »
Žádnou relevantní odpověď jsi nenapsal, jen trolíš.
Podle odpovědi se Marie domnívala, že nedostala odpověď na svou otázku. Takže ujištění, že je to správná odpověď na její otázku, bylo na místě.

Netrolil jsem, ale odpověděl na dotaz.
Nejprve jste odpověděl na dotaz, a v dalších komentářích jste začal trolit – a vymýšlet si. U MySQL jsou v CREATE TABLE klíčová slova KEY a INDEX prakticky synonyma (rozdíl je jenom v tom, že KEY někdy může znamenat PRIMARY KEY). KEY a INDEX neovlivňují typ indexu. B-Tree samozřejmě umožňuje unikátní index, a InnoDB a MyISAM ani jiný typ indexu, než B-Tree, nepodporuje. Hash indexy podporují jen MEMORY a NDB. Doporučuji přečíst si o příkazech CREATE TABLE a CREATE INDEX v referenční příručce MySQL, tyto informace tam najdete.

Mimochodem, odpověď na vaši sugestivní otázku:
Používá snad MySQL v obou případech B-tree?
tedy zní: ano (alespoň pro InnoDB a MyISAM, nevím, jaký je default index pro MEMORY a NDB).