![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 11.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Jeśli posiadam następującą bazę danych O nazwie: ‘super’, w której gromadzę superbohaterów i odpowiadających im aktorów. Actors(actor_id, actor_name, actor_surname) Hero(id, actor_id, name, place, weapon, skills) - 'actor_id' jest kluczem obcym To żeby połączyć te dwie tabele to wpiszę np.: select * from actors INNER JOIN hero using(actor_id); Z ‘select’ jest sprawa jasna, a co jeśli chcę dodać nowy record do dwóch tabel jednocześnie? – żeby klucz actor_id pojawił się jednocześnie w obu tabelach dla zachowania spójności. Czy może się nie da i trzeba oddzielnie napisać dwa zapytania? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Dwa zapytania.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 11.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
OK, dzięki, udało mi się stworzyć coś takiego, co działa:
Ale teraz patrzę po necie nie mogę znaleźć jak usunąć za pomoca DELETE z dwóch tabel, lub więcej, rekord powiązany ze sobą ![]() Ten post edytował Jozjasz 7.12.2011, 14:39:36 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 153 Pomógł: 41 Dołączył: 28.06.2011 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
Poszukaj o usuwaniu kaskadowym.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 11.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
To kaskadowe chyba działa tyko w InnoDB, a ja mam MyISAM i nie chcę tego zmienić. Nie ma jakiejś prostszej metody? Np. jeśli chciałbym usunąć 'actors.actor_id=13', który jest w dwóch tabelach...
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No to zrób dwa delete. Masz dwa insert to czemu nie możesz zrobic dwa delete?
Pozatym w manualu przy delete masz podaną składnią jak w jednym zapytaniu usunąć z dwóch tabel http://dev.mysql.com/doc/refman/5.0/en/delete.html -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 11.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
W linku co ci podałem, nigdzie nie widzę, by pomiędzy SELECT....FROM podawano nazwy kolumn. Dokumentacja jest oparta dobrymi przykładami. Trzeba się naprawdę mocno starać, by napisać to źle.
Wcześniej widziałem wersję jak mialeś dwa FROM. Skup się trochę. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 348 Pomógł: 26 Dołączył: 8.10.2008 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Dlaczego zleży Ci na tym aby pozostać na MyISAM?
Do tego typu zapytań, gdzie jedna czynność powoduje więcej niż jedną relację z bazą danych i nie są to selekty to zaleca się użycie transakcji, oczywiście w zależności do czego ma służyć ta baza... - MyISAM nie obsługuje transakcji. Poza tym 'actor_id' nie jest kluczem obcym tylko pseudo kluczem obcym gdyż MyISAM nie obsługuje relacji tabel... Ten post edytował Adi32 8.12.2011, 09:43:16 -------------------- Wolałem języki z rodziny C ale poszedłem na łatwizne...
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 03:31 |