| -Code46- |
Post
#1
|
|
Goście |
Witam!
Wkońcu natrafiłem na problem dotyczący kasowania danych z bazy mysql. Temat dotyczy bardziej bazy niż php ale mam nadzieję, że mi pomożecie.. Mam kilka tabel. Kasując informacje z jednej, muszę usunąć odpowiednie dane z innych tabeli. Wiem, że instrukcji DELETE nie można użyć tak jak select. Dla każdej tabeli należy wywołać osobno instukcję DELETE. Poczytałem sobi o trancakcjach i blokowaniu ale nie wiem jak to zastosować w praktyce. Chodzi mi o to, że gdy skasuję z tablei kont użytkownika, a z drugiej tabeli (tam gdzie mam dane o użytkownikach) nie uda się skaować odpowiedniego wpisu (np z nieznanych przyczyn) to tabelę z kontami doprowadzę do stanu z przed wykonani instrukcji DELETE, po to aby baza się nie posypała. Jak to zrobić? |
|
|
|
![]() |
| -Code46- |
Post
#2
|
|
Goście |
Cytat Wsumie sam sobie odpowiedziales, dlatego sie dodaje powiazania zeby np automatycznie sie to usuwalo, lub poprostu wymuszalo usuniecie. Jak dokładnie (np na przykładzie mojej tabeli) takie powiązanie utworzyć? Cytat Oczywiscie dochodza do tego operacje optymalizatora ale to juz inny problem. Zapytanie oczywiscie masz poprawnie. A co to za problem? Cytat Wszystko ok, tylko zeby mozna bylo utworzyc ta tabele to jednak musi byc w configu ustawione. Czyli w książce jest błąd? Bo napisali że albo dodać type albo ustawić w pliku i wtedy wszystkie tworzone tabele będą INNODB.. Cytat Jesli masz autocommit = 0 i masz tabele Inno DB to musisz zatwiedzac transakcje zeby rekord sie dodal. Dka autocommit = 1 mozesz poprostu wykonac zwyklego INSERTA bez transakcji i sie doda. Nie musisz w kodzie tego umieszczac jak stosujesz transakcje, wazne jest by byl start i zatwierdzenie lub wycofanie. Bo mi chodzi o to, że piszę aplikacje dla firmy. Ja poprawię tabele na INNODB. Wszędzie tam gdzie będę korzystał z instrukcji DELETE, UPDATE , INSERT będę korzystał z transakcji. Będę używał BEGIN i COMMIT lub ROLLBACK. Ale nie wiem jaką wartość ustawią sobie goście na serwerze w firmie. Jeśli będzie AUTOCOMMIT=0 to wszystko OK. ALe jeśli pozostawią sobie domyślną wartość 1 to co wtedy? Kod będzie poprawny? Rozumiesz - AUTOCOMMIT=1 a ja i tak używam BEGIN i COMMIT.. Aha i jeszcze jedno. W tabelach MyISAM można blokować tabele - niby taki rodzaj zabezpieczenia. A w tabelach INNODB jest blokowanie wierszy. No i w książce w pewnym momencie podany jest przykład na jawne blokowanie wierszy przykład: KLIENT A: ->polecenie wykonało się (zablokowaie wiersza 15tego) W między czasie KLIENT B: -> polecenie wykonało się -> polecenie nie wykonało się ponieważ klient A zablokował ten wiersz. KLIENT A
KLIENT B Teraz wykonało się wstrzymane polecenie (UPDATE .... )
A dalej w podrozdziale dotyczącym zakleszczeń opisywany jest przykład użytkownika A i B. Obydwaj stosują BEGIN i COMMIT i dochodzi do zakleszczenia. I już sam nie wiem, czy stosując transakcje automatycznie stosowane jest blokowanie wierszy? Czy żeby bardziej zabezpieczyć program przed błędami, warto stosować blokowanie wierszy i transakcje? Czy to będzie wogóle poprawne? |
|
|
|
Code46 Transakcje i blokowanie 17.04.2005, 14:48:57
SongoQ Mozna to zrealizowac na 2 sposoby.
1. Tabela typu... 17.04.2005, 15:12:27
Guest Cytat(SongoQ @ 2005-04-17 14:12:27)Mozna to z... 17.04.2005, 19:30:31
Code46 Cytat(SongoQ @ 2005-04-17 14:12:27)Mozna to z... 17.04.2005, 23:11:05
SongoQ CytatCo to jest ta tabela typu INNO DB? I kiedy st... 18.04.2005, 04:32:20
Code46 Cytat(SongoQ @ 2005-04-18 03:32:20)Podam moze... 18.04.2005, 09:31:41
SongoQ CytatW tabelach które podałeś zamiast Kla_Use_id p... 18.04.2005, 09:54:26
Guest No dobra ale jak to zrobić, żę usuwając jeden wpis... 18.04.2005, 13:13:42
matid Cytat(Guest @ 2005-04-18 14:13:42)No dobra al... 18.04.2005, 13:50:38
SongoQ Nie wystarczy ze zrobisz:
[SQL] pobierz, plaintex... 18.04.2005, 14:37:59
Code46 PYTANIE 1
Hmm.. Chyba źle to robiłem. Najpierw nap... 18.04.2005, 19:34:00
SongoQ CytatAle dlaczego tak się dzieje? Czy może to byc ... 18.04.2005, 20:02:49
SongoQ CytatJak dokładnie (np na przykładzie mojej tabeli... 18.04.2005, 21:08:10
Code46 CytatDla konta_id z tabeli dane tworzysz index, na... 18.04.2005, 22:34:19
SongoQ [SQL] pobierz, plaintext CREATE TABLE `bb` (`a... 19.04.2005, 00:14:32
Code46 Ok ostatnie pytanie. Zrobiłem dwie tabele:
[SQL] p... 19.04.2005, 11:13:32
SongoQ CytatAle z tego co pisałeś wcześniej, odpowiedni w... 19.04.2005, 14:46:56
Code46 CytatAle typ powiazania ma byc CASCADE czyli.
[SQ... 19.04.2005, 16:41:58
Code46 Działa
Ostatnie pytanie. Uruchamiam transakcje k... 19.04.2005, 18:46:56
SongoQ CytatMoim zdaniem to jest trochę tak od "pupy... 20.04.2005, 00:29:34
MiGoo Proste pytanka:
1. czy polecenie "FOR UPDAT... 6.07.2006, 14:10:09
KG- ad. 1) Nie, zostanie zignorowane. Blokowanie wiers... 6.08.2006, 21:54:04 ![]() ![]() |
|
Aktualny czas: 28.12.2025 - 15:49 |