Diskuze: Kontrola zaznamu pred insertem
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Můžeš použít normální insert, potom ON DUPLICATE KEY UPDATE, kde bys
dal nějakou nemožnou podmínku (WHERE ID=-1), ale je to zase založené na
UNIQUE hodnotách.
Jinak jak si uvedl, pokud nechceš mít dva stejné záznamy, použiješ UNIQUE
na sloupec, který má být pokaždé jiný.
Přes PHP se potom zeptáš mysqli->affected_rows a pokud se to bude rovnat
nule tak se vložení nepovedlo.
Ok diky, koukal jsem na to
ON DUPLICATE KEY
a v MySql to maji pekne resene, ja pouzivam MSSql db, takze jdu hledat jejich reseni.
v MS SQL by mělo jít
if not exists (select * from table where cell = 1)
insert into table(x,y) values (a,b);
ale nevím to 100%
V MS SQL by mělo fungovat do definice tabulky:
...
CONSTRAINT jmeno_omezeni UNIQUE NONCLUSTERED
(sloupec1, sloupec2, ... sloupecn)
...
Samozřejmě s uvedením všech sloupců, které se nemají vyskytovat ve
stejné kombinaci vícekrát. Ale zatím jsem to nepotřeboval, a tedy
nezkoušel. Pokud to nepůjde, jistě to půjde BI triggerem
To patrik.valkovic :
Vím že se to používá, ale nemůže nastat teoretický případ kdy více uživatelů zavolá ten if, u všech to projde protože záznam tam ještě není a tím vzniknou v DB duplicity?
Podívej se, jestli to MSSQL dělá jako transakci. Pokud ne, uzavři to do transakce.
Zobrazeno 7 zpráv z 7.