Autor Zpráva
golf
Profil *
Ahoj, když spousším trasakci která updatuje
START TRANSACTION;
UPDATE pocitadlo
SET celkem= celkem + 1 
WHERE ID = 3;
COMMIT;
kde je celkem = 5
a dejme tomu spustili by to dva uživatelé najednou, může se stát
že by první příkaz přečetl číslo 5, druhý taky 5 a ve výsledku by to nemělo 7 ale 6? Zamykaji se tabulky pro čtení, čeká se až se dokočí jedna transakce aby mohla začít druhá?
Keeehi
Profil
golf:
Zapsané by to mělo být správně a to myslím i bez transakcí.

Ovšem kdyby jsi tu hodnotu chtěl v transakci následně číst, tak tam už rozdíly být mohou. Záleží totiž na úrovni izolace. Hezký popis je na wiki.
golf
Profil *
Keeehi:
Zapsané by to mělo být správně a to myslím i bez transakcí.
Jde o to že kdyby to bylo bez transakce tak je to ok, ale pokud je to s transakcí tak ta změna se neprovede hned ale až za zavolání commit, takže by teoreticky druhá transakce mohla přečíst číslo 5 a obě to updatnout na 6.
golf
Profil *
Proto se ptám jestli můžou běžet dvě transakce najednou.
golf
Profil *
dev.mysql.com/doc/refman/5.6/en/set-transaction.html
napsal jsem to podle toho ale ukazuje mi to chybu
START TRANSACTION; 
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE; 

        UPDATE neco
        SET pocet_ = pocet_neceho + 1
        WHERE ID = 3;  

        COMMIT;
podtrhlo mi to druhý řádek že mám špatně

Chyba
Statická analýza:
Při analýze bylo nalezeno 2 chyb.

Unrecognized keyword. (near "READ" at position 53)
Unrecognized keyword. (near "WRITE" at position 58)

SQL dotaz:

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE

MySQL hlásí: Dokumentace
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'READ WRITE' at line 1

zkoušel jsem to i s čárkou:
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE;
ale pořádto ukazuje chybu


Asi sem tam měl překlep, už to funguje s tou čárkou, ale pořád mi to ukazuje chybu i když se to provede.
ibb.co/hSTe39


hm, ale když napíšu READ ONLY tak stejně můžu updatovat i když bych k tomu neměl mít přístup. Jakto?
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ ONLY;
golf
Profil *
už sem na to asi přišel

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: