Atomowość ciągu zapytań sql

Dział poświęcony programowaniu w każdym języku.

Atomowość ciągu zapytań sql

Postprzez Júzek » 2008-11-09, 14:34:05

Witam.
Zakładamy, że: skrypt add.php dodaje wartości do wielu tabel; w kolumnie kol_1 tabeli tab_1 musi być wartość klucza auto_inc... z tabeli tab_2. Funkcja mysql_insert_id() zwróci mi ostatni klucz, czyli w sytuacji gdy strona dodaje "miliony" wartości może zdarzyć się, że klucz główny z kluczem obcym nie będą się zgadzać.

Jak zapewnić atomowość tego typu INSERTów ?

Czy w przypadku polecenia "polecenie 1; polecenie 2" ową atomowość się zapewni ?
Avatar użytkownika
JúzekNone specified
BOSSu
BOSSu
 
Posty: 830
Dołączył(a): 2006-06-23, 15:08:15
Lokalizacja: ols.vectranet.pl
Podziękował : 0 razy
Otrzymał podziękowań: 0 razy

Re: Atomowość ciągu zapytań sql

Postprzez junior » 2008-11-09, 15:03:11

polecam funkcję mysql: MySQL LAST_INSERT_ID()
zawsze możesz się nie zgodzić z opinią autora tego postu.
Avatar użytkownika
juniorMale
V.I.P.
V.I.P.
 
Posty: 1446
Dołączył(a): 2008-06-22, 11:07:52
Lokalizacja: Łódź
Podziękował : 0 razy
Otrzymał podziękowań: 4 razy

Re: Atomowość ciągu zapytań sql

Postprzez Júzek » 2008-11-09, 15:33:17

Jeżeli zwraca (wg. nazwy) ostatni klucz - to nie zmienia to mojej sytuacji. Przyjmijmy nazwy: tab_1 -> "Temat" tab_2 -> "Treści". Treści odnoszą się do Tematów przez referencje (równość klucza głównego Tematu z kluczem obcym Treści). Czyli Treść "żaba" należy do tematu "płazy". W przypadku gdy nie ma kontroli nad kolejnością dodawania wartości do tabel może się zdarzyć, że Temat Treści "człowiek" zostanie wyprzedzony przez Temat "ptak" w rezultacie powstanie oczywisty błąd. I właśnie takiej sytuacji chce zapobiec :]
Avatar użytkownika
JúzekNone specified
BOSSu
BOSSu
 
Posty: 830
Dołączył(a): 2006-06-23, 15:08:15
Lokalizacja: ols.vectranet.pl
Podziękował : 0 razy
Otrzymał podziękowań: 0 razy

Re: Atomowość ciągu zapytań sql

Postprzez BlueMan » 2008-11-09, 16:35:27

Robiłeś jakiś testy, że sądzisz, że moga wystąpić przekłamania? Bo wg. mnie nie ma szans na to... .
Po 2 wytłumaczeniu dopiero skumałem o co cho:]
W C++ to się nazywa sekcja krytyczna i ustawia się mutexa pomiędzy 2 krytycznymi zmiennymi.
W mysql wg. mnie takie coś nie ma szans wystąpić. Poczytaj o różnego typu transakcjach - one potrafią blokować dostep do tabel w momencie pracy nad nimi (inny wątek nie uzyska dostępu do niego). No i transakcje mają ten plus, żę jak jedno zapytanie się nie powiedzie, to inne nie zostaną wykonane :]
Czytaj regulamin - unikniesz wielu problemów.
Korzystajcie z załączników na forum aby pliki nie ginęły w przyszłości w zewnętrznych serwisach!

Obrazek
Avatar użytkownika
BlueManMale
Administrator
Administrator
 
Posty: 19092
Dołączył(a): 2004-05-26, 17:34:59
Lokalizacja: Dabrowa Górn.
Podziękował : 6 razy
Otrzymał podziękowań: 5 razy
Imię: Szymon

Re: Atomowość ciągu zapytań sql

Postprzez Júzek » 2008-11-09, 16:41:11

Propo testów, wieczorem podsmażę procka i opublikuje wyniki :]
A co do transakcji, miałem, nadzieje, że rozwiąże to łatwiej. Ale jak trzeba będzie to przetrzepie notatki z uczelni....
Avatar użytkownika
JúzekNone specified
BOSSu
BOSSu
 
Posty: 830
Dołączył(a): 2006-06-23, 15:08:15
Lokalizacja: ols.vectranet.pl
Podziękował : 0 razy
Otrzymał podziękowań: 0 razy

Re: Atomowość ciągu zapytań sql

Postprzez junior » 2008-11-09, 19:03:18

tyle, że mysql to tak średnio transakcyjny jest....
zawsze możesz się nie zgodzić z opinią autora tego postu.
Avatar użytkownika
juniorMale
V.I.P.
V.I.P.
 
Posty: 1446
Dołączył(a): 2008-06-22, 11:07:52
Lokalizacja: Łódź
Podziękował : 0 razy
Otrzymał podziękowań: 4 razy

Re: Atomowość ciągu zapytań sql

Postprzez BlueMan » 2008-11-09, 19:29:31

Júzek, pamiętaj, że tabele muszą być jako INODB a nie MyISAM :]
No i MySQL w wersji 5.

junior, czemu niby?
Czytaj regulamin - unikniesz wielu problemów.
Korzystajcie z załączników na forum aby pliki nie ginęły w przyszłości w zewnętrznych serwisach!

Obrazek
Avatar użytkownika
BlueManMale
Administrator
Administrator
 
Posty: 19092
Dołączył(a): 2004-05-26, 17:34:59
Lokalizacja: Dabrowa Górn.
Podziękował : 6 razy
Otrzymał podziękowań: 5 razy
Imię: Szymon

Re: Atomowość ciągu zapytań sql

Postprzez Júzek » 2008-11-09, 19:49:54

Wg mojego PMA InnoDB mam wyłączone. Jak to włączyć ? (A dlaczego InnoDB to sobie doczytam :])
Avatar użytkownika
JúzekNone specified
BOSSu
BOSSu
 
Posty: 830
Dołączył(a): 2006-06-23, 15:08:15
Lokalizacja: ols.vectranet.pl
Podziękował : 0 razy
Otrzymał podziękowań: 0 razy

Re: Atomowość ciągu zapytań sql

Postprzez BlueMan » 2008-11-09, 20:28:10

Tzn, nie "włączyć", ale przy tworzeniu tabel trzeba wyklikać, aby były one stworzone w tej postaci.
Bo chyba nie da się tego "wyłączyć" :D
Czytaj regulamin - unikniesz wielu problemów.
Korzystajcie z załączników na forum aby pliki nie ginęły w przyszłości w zewnętrznych serwisach!

Obrazek
Avatar użytkownika
BlueManMale
Administrator
Administrator
 
Posty: 19092
Dołączył(a): 2004-05-26, 17:34:59
Lokalizacja: Dabrowa Górn.
Podziękował : 6 razy
Otrzymał podziękowań: 5 razy
Imię: Szymon

Re: Atomowość ciągu zapytań sql

Postprzez Júzek » 2008-11-09, 20:38:42

Tada :]
Obrazek

Wersja serwera: 5.0.51a
Wersja klienta MySQL: 5.0.51a
Avatar użytkownika
JúzekNone specified
BOSSu
BOSSu
 
Posty: 830
Dołączył(a): 2006-06-23, 15:08:15
Lokalizacja: ols.vectranet.pl
Podziękował : 0 razy
Otrzymał podziękowań: 0 razy

Re: Atomowość ciągu zapytań sql

Postprzez BlueMan » 2008-11-09, 20:47:31

Kod: Zaznacz cały
alter table table_name engine=innodb;
może takie coś pomoże :]


A co do Twojego obrazka, to faktycznie u mnie w serwerze tez miałem go wyłączonego :]

/etc/mysql/my.cnf
i tam miałem
Kod: Zaznacz cały
skip-innodb

Zahashowałem i już mi działa :]
Czytaj regulamin - unikniesz wielu problemów.
Korzystajcie z załączników na forum aby pliki nie ginęły w przyszłości w zewnętrznych serwisach!

Obrazek
Avatar użytkownika
BlueManMale
Administrator
Administrator
 
Posty: 19092
Dołączył(a): 2004-05-26, 17:34:59
Lokalizacja: Dabrowa Górn.
Podziękował : 6 razy
Otrzymał podziękowań: 5 razy
Imię: Szymon

Re: Atomowość ciągu zapytań sql

Postprzez junior » 2008-11-09, 20:50:30

Bluman, nie wiem na razie czemu :) ale z kim gadam z profesorków na uczelni o mysql to zawsze kręcą nosem, że mysql nie potrafi dopilnować kolejności operacji i często wycofanie operacji jest niemożliwe.
zawsze możesz się nie zgodzić z opinią autora tego postu.
Avatar użytkownika
juniorMale
V.I.P.
V.I.P.
 
Posty: 1446
Dołączył(a): 2008-06-22, 11:07:52
Lokalizacja: Łódź
Podziękował : 0 razy
Otrzymał podziękowań: 4 razy

Re: Atomowość ciągu zapytań sql

Postprzez BlueMan » 2008-11-09, 20:53:59

To ja jestem żywym przykładem, że się da. Często stosuje w skrypcie transakcje i działają dobrze.
Wiem, bo nie raz jak testuje, to ręcznie sprawdzam, az w końcu phpmyadmin wyłoży mi się na jakimś zapytaniu.
Potem ręcznie musze usuwać poprzednie zapytania, a tak to PHP za mnie to robi w transakcjach.

Można zrobić przecież prosty test "czy działa" i się dowiesz :]
Czytaj regulamin - unikniesz wielu problemów.
Korzystajcie z załączników na forum aby pliki nie ginęły w przyszłości w zewnętrznych serwisach!

Obrazek
Avatar użytkownika
BlueManMale
Administrator
Administrator
 
Posty: 19092
Dołączył(a): 2004-05-26, 17:34:59
Lokalizacja: Dabrowa Górn.
Podziękował : 6 razy
Otrzymał podziękowań: 5 razy
Imię: Szymon

Re: Atomowość ciągu zapytań sql

Postprzez junior » 2008-11-09, 21:00:06

problemy zaczynają się gdy wiele osób korzysta z tych samych danych i baza jest duża :)
zawsze możesz się nie zgodzić z opinią autora tego postu.
Avatar użytkownika
juniorMale
V.I.P.
V.I.P.
 
Posty: 1446
Dołączył(a): 2008-06-22, 11:07:52
Lokalizacja: Łódź
Podziękował : 0 razy
Otrzymał podziękowań: 4 razy

Re: Atomowość ciągu zapytań sql

Postprzez Júzek » 2008-11-09, 21:22:49

Blueman napisał(a):Zahashowałem i już mi działa :]


junior napisał(a):problemy ... jest duża :)

... i właśnie taka się zapowiada :]
Avatar użytkownika
JúzekNone specified
BOSSu
BOSSu
 
Posty: 830
Dołączył(a): 2006-06-23, 15:08:15
Lokalizacja: ols.vectranet.pl
Podziękował : 0 razy
Otrzymał podziękowań: 0 razy

Re: Atomowość ciągu zapytań sql

Postprzez BlueMan » 2008-11-09, 21:25:18

No to zmień silnik bazy danych na płatnego Oracle xD
MySQL nie nadaje się do DUUUŻYCH projektów :P
Czytaj regulamin - unikniesz wielu problemów.
Korzystajcie z załączników na forum aby pliki nie ginęły w przyszłości w zewnętrznych serwisach!

Obrazek
Avatar użytkownika
BlueManMale
Administrator
Administrator
 
Posty: 19092
Dołączył(a): 2004-05-26, 17:34:59
Lokalizacja: Dabrowa Górn.
Podziękował : 6 razy
Otrzymał podziękowań: 5 razy
Imię: Szymon

Re: Atomowość ciągu zapytań sql

Postprzez Júzek » 2008-11-09, 21:28:41

Baza siedzi na zewnętrznym serwerze wybranym "z góry" przez klient laika... obawiam się że będę musiał przypomnieć adminowi o register_globals... No ale to nie mój problem. W dokumentacji opisze wymagania projektu co uchroni mój zadek :]
Avatar użytkownika
JúzekNone specified
BOSSu
BOSSu
 
Posty: 830
Dołączył(a): 2006-06-23, 15:08:15
Lokalizacja: ols.vectranet.pl
Podziękował : 0 razy
Otrzymał podziękowań: 0 razy

Re: Atomowość ciągu zapytań sql

Postprzez junior » 2008-11-09, 21:49:00

oracle jest bezpłatny dopóki nie próbujesz na nim zarabiać:D
zawsze możesz się nie zgodzić z opinią autora tego postu.
Avatar użytkownika
juniorMale
V.I.P.
V.I.P.
 
Posty: 1446
Dołączył(a): 2008-06-22, 11:07:52
Lokalizacja: Łódź
Podziękował : 0 razy
Otrzymał podziękowań: 4 razy


  • Inne

Powrót do Programowanie

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości