![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 28.07.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Witam,
INSERT INTO tabela_1 (id_tab_1, pole_1, pole_2,........itd) to wiem i nie ma problemu (działa, bo musi) ale jak wstawić nowy rekord do dwóch (lub więcej) tabel będących w relacji. dla przykładu tabela_2 ma pola (id_tabela_2, id_tabela_1, pole_x, pole_y) Jak powinno wyglądać to MySQL, żeby do pola id_tabela_1 w tabela_2 wstawiany był ten sam rekord. Dzieki za okazaną pomoc!!! -------------------- Pozdrawiam, SamoChwała
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 764 Pomógł: 3 Dołączył: 30.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
aby zapewnic pelna spojnosc danych musisz wykorzystac transakcje....
postepowanie (pisze teraz jak powinno to wygldac w wierszu polecen) wyglada w sposob nastepujacy:
mozna by tutaj pewnie stworzyc jakas procedure, przy czym nie znam sie na pisaniu takich rzeczy... z kolei utworzyc taka funkcje z wykorzystaniem php to nie bedzie specjalnie klopotow edit: jezeli chodzi o poprzedni watek to odpowiem troche pozniej gdyz w chwili obecnej mam pare rzeczy do zrobienia Ten post edytował mhs 28.07.2004, 14:15:34 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 259 Pomógł: 0 Dołączył: 17.05.2003 Skąd: Nysa Ostrzeżenie: (10%) ![]() ![]() |
zaleznie od tego w jaki sposob przebiega relacja, znaczy sie jaki jest zwiazek pomiedzy 2 obiektami, zaczynamy uzupelnianie danych od obiektu podrzednego, a nastepnie wprowadzamy dane do obiektu macierzystego np. tabela 1 zawiera klucz obcy z tabeli nr 2, wiec wpierw wprowadzamy dane do 2, a dopiero potem system pozwoli nam na dodanie rekoru do 1.
-------------------- ![]() "Nie wiedziałem tylko, że Bóg też był na grzybach, gdy majstrował przy wszechświecie" (Janusz Wisniewski) dev: gazeta.ie |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 28.07.2004 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
W pierwszej chwili po przeczytaniu myslałem, że Twoja odp. jest żartem. Ciężko mi było zrozumieć jak to możliwe:
1. dodajemy nowy rekord do tabeli podrzędnej 2. dopiero teraz dodajemy nowy rekord do tabeli nadrzędnej Wydawało mi się to nielogiczne ze względów na spójność danych obu tabel. Przeanalizowałem jednak obie wypowiedzi i zaczołem szukać wytłumaczenia. Znalazłem w dokumentacji MySQL'a wersja 5 (jeszcze nieoficjalnej wersji) i dowiedziałem się, że transakcje wiązane (chyba dobrze zrozumiałem) będą dostepne dopiero od tej własnie wersji, a w obecnej 3.23 trzeba zrobić małe "oszustwo". Wykombinowałem coś takiego i nie jestem pewny czy dobrze kombinuje (jeszcze nie działa). Kod $tabela_1_id = generate_key(); for each tabela_2 (id, pole_1, pole_2) INSERT INTO tabela_1 (id, pole_1, pole_2, pole_3) VALUES($tabela_1_id); INSERT INTO tabela_1 (id, pole_1, pole_2, pole_3) VALUES ($tabela_1_id);
-------------------- Pozdrawiam, SamoChwała
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 764 Pomógł: 3 Dołączył: 30.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
to co napisal halfik jest wlasciwie slownym opisem tego co ja Ci zaprezentowalem...
jezeli chodzi o transakcje sa one dostepne juz od wersji 3.23.XX wiec mozna z nich korzystac... pamietaj tylko, ze tabele musisz definiowac jako InnoDB, a chcac korzystac z transakcji (ktore zapewniaja spojnosc danych!!) musisz postepowac wg. przykladou ktory Ci zaprezentowalem... aby korzystac z tych mechanizmow nie musisz posiadac wersji 5 (ktora niewiadomo kiedy pojawi sie w wersji stabilnej).. wystarczy korzystac z nowych dostepnych wersji mysql'a |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat(mhs @ 2004-07-30 12:41:13) jezeli chodzi o transakcje sa one dostepne juz od wersji 3.23.XX wiec mozna z nich korzystac... Chyba nie mówisz o MySQL ![]() Transakcji w MySQL nie ma ani w wersjach 3.x ani 4.x - można je symulować za pomocą np. AdoDB. -------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 764 Pomógł: 3 Dołączył: 30.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(spenalzo @ 2004-07-31 03:24:42) Cytat(mhs @ 2004-07-30 12:41:13) jezeli chodzi o transakcje sa one dostepne juz od wersji 3.23.XX wiec mozna z nich korzystac... Chyba nie mówisz o MySQL ![]() Transakcji w MySQL nie ma ani w wersjach 3.x ani 4.x - można je symulować za pomocą np. AdoDB. czy aby na pewno? to wytlumacz mi czego przykladem jest powyzszy kod ktory zaprezentowalem w pierwszej odpowiedzi i jak ma Twoja odpowiedz do tego: Transactions and Atomic Operations nie wiem, moze ja tutaj czegos nie rozumiem, nie wiem... bede wdzieczny za odpowiedz |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat MySQL Server (version 3.23-max and all versions 4.0 and above) supports transactions with the InnoDB and BDB transactional storage engines. Cytat The other non-transactional storage engines in MySQL Server (such as MyISAM) follow a different paradigm for data integrity called ``atomic operations.'' In transactional terms, MyISAM tables effectively always operate in AUTOCOMMIT=1 mode. Atomic operations often offer comparable integrity with higher performance. Mysql nie obsluguje transakcji za wyjatkiem powyższsch typów tabel (bo dla myisam czy innnych zawsze jest autocommit=1 czyli normalny insert bez możliwosci cofniecia). Czyli z punktu widzenia przecietnego użytkownika nie ma transakcji w MySQL. ![]() -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 259 Pomógł: 0 Dołączył: 17.05.2003 Skąd: Nysa Ostrzeżenie: (10%) ![]() ![]() |
obawiam sie ze spenzalo ma racje. transakcje maja byc w 5, przynajmniej takie sa zapowiedzi.
swoja droga dziwna sprawa, ze tak stary dbms, z tak doswiadczona rupa developerska, a do tej pory wlasnie transakcje, standard posrod standardow, byly wielka bolaczka... -------------------- ![]() "Nie wiedziałem tylko, że Bóg też był na grzybach, gdy majstrował przy wszechświecie" (Janusz Wisniewski) dev: gazeta.ie |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 31.07.2025 - 09:51 |