Diskuze: SQL vložení a update
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 10 zpráv z 10.
//= 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.
Co jsi nasel googlem?
google = maria db sql insert update in one query
... a primo v dokumentaci vidim...
https://mariadb.com/kb/en/insert-on-duplicate-key-update/
INSERT INTO ins_duplicate VALUES (4,'Gorilla') ON DUPLICATE KEY UPDATE animal='Gorilla';
SELECT * FROM ins_duplicate;
+----+----------+
| id | animal |
+----+----------+
| 1 | Aardvark |
| 2 | Cheetah |
| 3 | Zebra |
| 4 | Gorilla |
+----+----------+
Ano, to je přesně ten případ, který jsem popisoval, že jsem našel.
Ten dotaz který uvádíš, ten INSERT/UPDATE umí přepínat jen podle toho
jestli sloupec s unikátním klíčem je v kolizi se vkládaným záznamem, což
není to, co potřebuji
Insert se da napsat mnoha zpusoby... Klidne tam muzes pridat i SELECT. Na
nekterem forku nekdo zminoval, ze by to melo fungovat na jakykoliv uniq index.
Jen to proste musis jinak napsat Hlavne by to melo byt ryhlejsi nez IF.
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
https://dba.stackexchange.com/questions/89696/how-to-insert-or-update-using-single-query
Na jednom forku jsem nasel tohle
IF EXISTS(select * from test where id=30122)
update test set name='john' where id=3012
ELSE
insert into test(name) values('john');
update test set name='john' where id=3012
IF @@ROWCOUNT=0
insert into test(name) values('john');
Jak píšeš, mělo by to fungovat na všechny sloupce které mají nastavený UNIQUE, ale problém je, že ten můj "unikátní klíč" je unikátní jen v rámci jednoho dne. Tzn. že klidně každý den tam může ten klíč být jako nová záznam s novým datumem.
To řešení ale vypadá dobře, zkusím to hned jak se k tomu dostanu.
Asi ti nerozumim. Unikatni reseni na 1 den mas preci podchycene klicem, ne? Nebo, aspon, tak bych to resil ja, ze vytvorim klic nad nekolika sloupci najednou.
tady jde o to, že ale může existovat více řádků se stejným datumem a různými klíči, a zároveň může existovat více řádků se stejnými klíči ale různými datumy. Což se pomocí unique řešit nedá
v podstatě se ten problém dá představit tak, že počítám, kolikrát byl daný klíč daný den použit, i když to není přesně to k čemu to využívám.
Ahoj, tady ti asi chybí znalosti o primárním klíči:
A primary key must contain unique values. If the primary key consists of multiple columns, the combination of values in these columns must be unique
https://www.mysqltutorial.org/…primary-key/
Takže dej ID a date jako součást primárního klíče a měl bys mít problém vyřešen.
Mozna to zkusim rici jinak. Index / key, muzes vytvorit pro jeden sloupec
nebo pro nekolik sloupcu najednou (malokdy se to pouziva, ale je to vyhodne pro
urcite sql dotazy). Takze, pokud jsi schopen najit podle neceho vzdy jen 1
radek, tak vsechny ty sloupce pouzij pro jeden klic.
Ale, samozrejme, muzes pouzit i jiny sql dotaz. Jen pocitej s tim, ze ti mozna
prepise update vice nez 1 radek nebo select najde vice nez jeden radek.
Díky za trpělivost, nakonec vyřešeno hned tím prvním způsobem, jen
mně tak nějak ještě chyběla znalost těch věcí okolo toho.
Každopádně nastudováno a už to funguje tak jak jsem potřeboval.
Díky
Zobrazeno 10 zpráv z 10.