![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 21.11.2016 Ostrzeżenie: (0%) ![]() ![]() |
Witam, jestem początkującym twórcą baz danych w oparciu o narzędzie Workbench. Mój problem polega na tym iż nie mogę poradzić sobie z zagadnieniem skopiowania rekordów z tabeli A do tabeli B. Czy mógłby mnie ktoś nakierować na dobry trop? Poniżej wklejam dwa script'y ukazujące obydwie tabele:
PS: Chcę skopiować rekordy X, Y, B, L z tabeli wsp_MIASTA do tabeli msu_MIASTA. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 21.11.2016 Ostrzeżenie: (0%) ![]() ![]() |
A jak ułożyć warunek w oparciu o klucze główne?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dokładnie tak samo.
-------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 21.11.2016 Ostrzeżenie: (0%) ![]() ![]() |
Albo się do końca nie rozumiemy albo ja nie rozumiem. Otóż chcę aby wszystkie wiersze z kolumn B,L,X,Y z tabeli wsp_MIASTA skopiowały się do tych samych kolumn z tabeli msu_MIASTA. Ustawiłem klucz główny by przy kopiowaniu danych nastąpiło przy okazji ich posortowanie. Przy wykorzystaniu poniżej wklejonego scriptu:
wyskakuje błąd: Field 'id_m' doesn't have a default value Hym, niewiele mi to mówi jako że rozpoczynam Swoją przygodę z MySQL. PS: Nie potrzebuje odsyłania do stron z encyklopediami MySQL z banalnymi przykładami bo potrafię takie sam wyszukać. Na sztukę to można jajka sprzedawać, a nie odpowiadać na posty. Ten post edytował heronek 22.11.2016, 11:00:51 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Field 'id_m' doesn't have a default value oznacza że nie wkładasz żadnej wartości do tego pola, a nie ma też żadnej domyślnej. U ciebie id_m i id_w są NOT NULL.
-------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 21.11.2016 Ostrzeżenie: (0%) ![]() ![]() |
Domyślnie jest NOT NULL, ale po stworzeniu tychże tabeli zostały one uzupełnione o dane, więc mają wartość, a mimo to nadal wyświetla ten komunikat błędu.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
To że wcześniej były zapisane jakieś rekordy z wartością nie ma znaczenia. Podczas operacji INSERT nie mają żadnej wartości a zgodnie z restrykcją kolumny mają być NOT NULL.
-------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 21.11.2016 Ostrzeżenie: (0%) ![]() ![]() |
Więc istnieje jakiś prosty sposób na kopiowanie całych kolumn z jednej tabeli do drugiej w sposób uporządkowany na podstawie klucza głównego (w tym przypadku id_m id_w)?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Tak, ten wyżej z uwzględnieniem restrykcji kolumn. Skopiuj też klucze albo zdejmij ograniczenie NOT NULL.
Ten post edytował viking 22.11.2016, 12:20:10 -------------------- |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 21.11.2016 Ostrzeżenie: (0%) ![]() ![]() |
Niestety nie mam pojęcia jak w tym przypadku ułożyć warunek o klucze główne które nałożyłem po wprowadzeniu danych (id_m, id_w) do obydwu tabel. A przecież nie będę tworzył warunku na podstawie kopiowania do niego wartości każdego z wierszy klucza.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
No dobrze, to co ma się znaleźć w nowej tabeli w kolumnach id_m, id_w?
-------------------- |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 21.11.2016 Ostrzeżenie: (0%) ![]() ![]() |
A więc tak, mają powstać dwie tabele- wsp_MIASTA oraz msu_MIASTA:
Uzupełniam je o następujące dane:
insert into msu_MIASTA (id_w,id_m,nazwa_m) values('06','03032','Chelm'), ('06','63011','Lublin'), ('06','61011','Biala Podlaska'), ('06','19011','Wlodawa'), ('06','01021','Terespol'), ('06','15011','Radzyn Podlaski'), ('06','04011','Hrubieszow'), ('06','05054','Janow Lubelski'), ('06','06011','Krasnystaw'), ('06','07011','Krasnik'), ('06','08011','Lubartow'), ('06','10034','Leczna'), ('06','11011','Lukow'), ('06','12054','Opole Lubelskie'), ('06','13044','Parczew'), ('06','14011','Pulawy'), ('06','16044','Ryki'), ('06','16011','Deblin'), ('06','17011','Swidnik'), ('06','17034','Piaski'); Następnie tworzę klucze głowne:
Więc mam już tabele z uzupełnionymi poszczególnymi kolumnami. Teraz chciałbym utworzyć skrypt który pozwoli mi skopiowanie wartości (B,L,X,Y) z tebeli wsp_MIASTA do tabeli msu_MIASTA w oparciu o ustalone klucze główne. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Klucz główny dodaje tylko indeks i unikalność. Dopóki nie usuniesz NOT NULL nie będziesz w stanie wstawić tam pustych wartości. Jeśli nie chcesz kopiować kolumn id_m/w t wstaw tam coś losowego. Naprawde nie wiem jak mam ci to lepiej wytłumaczyć. Takie restrykcje sam nakładasz i nie da się ich inaczej złamać bo wtedy bezcelowe były by wszystkie ograniczenia.
Ten post edytował viking 22.11.2016, 13:15:08 -------------------- |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 21.11.2016 Ostrzeżenie: (0%) ![]() ![]() |
A istnieje taka możliwość byś mi przedstawił jak byś to zrobił?
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Moderatorzy Postów: 36 556 Pomógł: 6314 Dołączył: 27.12.2004 ![]() |
Nie znamy twoich zalozen. nie wiemy po grzyba chcesz miec dwie niemalze identyczne tabele - na chwile obecna to nie ma zadnego sensu.
Nie wiemy czemu zakladasz tak dziwne klucze glowne, ktore na dodatek nie chcesz kopiowac z jednej tabeli do drugiej a ktore na chwile obecna wydaja sie, ze powinny byc poprostu skopiowane ps: odnosze nie odparte wrazenie ze ty z tabeli wsp chcesz wpisac dane do odpowiednich rekordow z msu. Nie wiem czy wiesz, ale INSERT dodaje te rekordy jako nowe do msu a nie updatuje rekordy z msu. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 21.11.2016 Ostrzeżenie: (0%) ![]() ![]() |
O tym to wiem. Takie są studia panowie i bezsensowne założenia.
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Moderatorzy Postów: 36 556 Pomógł: 6314 Dołączył: 27.12.2004 ![]() |
Ale poki co to ty nam opowiadasz o tych zalozeniach i nadal nic wiemy. Wiec poki co to to problem jest po Twojej stronie a nie po stronie studiow. To nie studia nam nie mowia co sie ma konkretnie dziac tylko ty.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 21.11.2016 Ostrzeżenie: (0%) ![]() ![]() |
Przecież wyraźnie napisałem że mam w oparciu o dwie kolumny które są takie same w dwóch tabelach skopiować dane z jednej tabeli do drugiej, przykładowo żeby dane z kolumny X,Y o id=1 kopiowały się do drugiej tabeli o tym samym id, a tak ma być dla wszystkich kolumn. Jak wyglądają tabele to widać na poprzednich moich postach.
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Moderatorzy Postów: 36 556 Pomógł: 6314 Dołączył: 27.12.2004 ![]() |
Cytat Przecież wyraźnie napisałem [.....] przykładowo żeby dane z kolumny X,Y o id=1 kopiowały się do drugiej tabeli o tym samym id, a tak ma być dla wszystkich kolumn A ja skolei ci wyraznie napisalem:Cytat ps: odnosze nie odparte wrazenie ze ty z tabeli wsp chcesz wpisac dane do odpowiednich rekordow z msu. Nie wiem czy wiesz, ale INSERT dodaje te rekordy jako nowe do msu a nie updatuje rekordy z msu. Na co odpisales: Cytat O tym to wiem. Tak wiec nie, nie wiesz. Zrozum wkoncu ze ty chcesz zrobic UPDATE a nie INSERT. Nie wierze, ze na studiach kaza ci robic insert gdy proszą o aktualizacje rekordu wiec nie zwalaj prosze swojej niewiedzy na studia bo to tylko i wylacznie twoja wina ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 9.05.2025 - 07:32 |