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.


Zobrazeno 10 zpráv z 10.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
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.