Autor | Zpráva | ||
---|---|---|---|
golf Profil * |
#1 · Zasláno: 9. 8. 2018, 18:05:21
Ahoj, když spousším trasakci která updatuje
START TRANSACTION; UPDATE pocitadlo SET celkem= celkem + 1 WHERE ID = 3; COMMIT; 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 |
#2 · Zasláno: 9. 8. 2018, 18:46:46
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 * |
#3 · Zasláno: 9. 8. 2018, 19:18:50
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 * |
#4 · Zasláno: 9. 8. 2018, 20:25:18
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; 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; 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 * |
#6 · Zasláno: 10. 8. 2018, 18:50:49
už sem na to asi přišel
|
||
Časová prodleva: 4 roky
|
0