• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

MYSQL-zadanie domowe sprawdzenie

+1 głos
63 wizyt
pytanie zadane 26 maja w SQL, bazy danych przez ANONIM2137 Początkujący (320 p.)
edycja 27 maja przez ANONIM2137

Mam do zrealizowania projekt w szkole.  Napisałem kod ,ale niestety wyskakują mi błędy o nazwie 25P02. Czy byłby ktoś w stanie pomóc lub dopowiedzieć co w poniższym kodzie jest jest nie tak??? Przesyłam również wytyczne projektu. Z góry ładnie dziękuję. 

BEGIN TRANSACTION

INSERT INTO panstwo (nazwa_panstwa, numer_kierunkowy_kraju) VALUES 
('POLSKA', 48 ),
('ARGENTYNA', 54),
('AUSTRIA', 43),
('BELGIA', 32),
('BRAZYLIA', 55),
('BUŁGARIA', 359),
('CHILE', 56),
('CHINY', 86),
('CHORWACJA', 385),
('CZAD', 235),
('CZECHY', 420),
('DANIA', 45),
('EGPIT', 20),
('FRANCJA', 33),
('HOLNDIA', 31)

SAVEPOINT my_save_point_1;

INSERT INTO miasto (nazwa_miasta, kod_pocztowy) VALUES 
('SANDOMIERZ', 27-600),
('WARSZAWA', 01-001),
('KRAKÓW', 31-942),
('POZNAŃ', 60-104),
('STALOWA WOLA', 37-450),
('BIAŁYSTOK', 15-796),
('LUBLIN', 20-153),
('WROCŁAW', 54-614),
('RZESZÓW', 35-030),
('SZCZECIN', 70-843),
('KATOWICE', 40-153),
('GDAŃSK', 80-288),
('CIECHOCINEK', 87-720),
('SOPOT', 81-842),
('GDYNIA', 81-537)

SAVEPOINT my_save_point_2;

INSERT INTO hotele (nazwa_hotelu, adres_hotelu) VALUES 
('SARMATA', 'SANDOMIERZ SŁOWACKIEGO 7'),
('HILTON', 'WARSZAWA MICKIEWICZA 2' ),
('MARIOT', 'KRAKÓW ZALESZAŃSKA 88' ),
('SOFITEL', 'POZNAŃ KOWALSKIEGO 33' ),
('COPERNICUS', 'STALOWA WOLA KACZYŃSKIEGO 939'),
('SHERATON', 'BIAŁYSTOK MIODOWA 11'),
('HILTON', 'LUBLIN ZAKOLE 84' ),
('PODEWILS', 'WROCŁAW SZUWARSKIEGO 43' ),
('BRISTOL', 'RZESZÓW MAZOWIECKA 43'),
('MAMAAISON LE REGINA', 'SZCZCECIN SANDOMIERSKA 1'),
('WENTZL', 'KATOWICE BACZYŃSKIEGO 21' ),
('SENACKI', 'GDAŃSK MICKIEWICZA 2'),
('ANDELS', 'CIECHOCINEK KWIATOWA 3' ),
('QUEEN BOUTIQUE', 'SOPOT SZKOLNA 44' ),
('ARISTO', 'GDYNIA SOPOCKA 33' ),
('ANDELS', 'SANDOMIERZ SŁOWACKIEGO 7'),
('HILTON', 'WARSZAWA MICKIEWICZA 2' ),
('MARIOT', 'KRAKÓW ZALESZAŃSKA 88' ),
('SOFITEL', 'POZNAŃ KOWALSKIEGO 33' ),
('COPERNICUS', 'STALOWA WOLA KACZYŃSKIEGO 939'),
('SHERATON', 'BIAŁYSTOK MIODOWA 11'),
('HILTON', 'LUBLIN ZAKOLE 84' ),
('PODEWILS', 'WROCŁAW SZUWARSKIEGO 43' ),
('BRISTOL', 'RZESZÓW MAZOWIECKA 43'),
('MAMAAISON LE REGINA', 'SZCZCECIN SANDOMIERSKA 1'),
('WENTZL', 'KATOWICE BACZYŃSKIEGO 21' ),
('SENACKI', 'GDAŃSK MICKIEWICZA 2'),
('ANDELS', 'CIECHOCINEK KWIATOWA 3' ),
('QUEEN BOUTIQUE', 'SOPOT SZKOLNA 44' ),
('ARISTO', 'GDYNIA SOPOCKA 33' )

SAVEPOINT my_save_point_3;

INSERT INTO klient (imie, nazwisko) VALUES 
('DAMIAN', 'KOT'),
('PIOTR', 'NOWAK'),
('JAN', 'PIES'),
('OLA', 'LIS'),
('DAGMARA', 'STYCZEŃ'),
('OLEK', 'TRZECI'),
('KUBA', 'KALINKA'),
('TOMEK', 'MARCHEWKA'),
('KAMIL', 'NOWAKOWSKI'),
('JACEK', 'OLSZEWSKI'),
('ZYGMUNT', 'PIES'),
('WALDEMAR', 'KOŃ'),
('ANIA', 'JURAS'),
('ZOSIA', 'KOŁECZEK'),
('JULKA', 'SŁONECZNA')

SAVEPOINT my_save_point_4;

INSERT INTO rezerwacje (start_rezerwacji, koniec_rezerwacji) VALUES
('2020-09-10', '2020-10-10'),
('2020-06-10', '2020-07-10'),
('2020-10-10', '2020-12-10'),
('2020-09-01', '2020-09-09'),
('2020-07-02', '2020-09-05'),
('2020-03-10', '2021-09-10'),
('2021-09-10', '2021-09-18'),
('2020-01-10', '2020-05-08'),
('2020-04-10', '2020-05-27'),
('2020-09-10', '2020-09-30'),
('2020-12-19', '2020-12-29'),
('2020-07-13', '2020-09-10'),
('2021-07-10', '2021-09-24'),
('2020-05-11', '2020-06-10'),
('2020-09-10', '2020-09-29')

SAVEPOINT my_save_point_5;

INSERT INTO pokoje (numer_pokoju, pietro_pokoju) VALUES
('1', '1'),
('2', '1'),
('3', '1'),
('4', '1'),
('5', '1'),
('6', '1'),
('7', '1'),
('8', '1'),
('9', '1'),
('10', '1'),
('11', '2'),
('12', '2'),
('13', '2'),
('14', '2'),
('15', '2')

SAVEPOINT my_save_point_6;

COMMIT

Błąd przy insertach:

1 odpowiedź

+2 głosów
odpowiedź 26 maja przez Wiciorny Mędrzec (155,400 p.)
wybrane 26 maja przez ANONIM2137
 
Najlepsza

Po co stosujesz SAVEPOINT, skoro nie obsługujesz ROLLBACK- swoją drogą to nie miałoby sensu, bo transakcja twoja powinna być jednolita ->ALBO WYKONA SIĘ W CAŁOŚCI, ALBO WCALE -więc jeśli stosujesz SAVEPOINT powinieneś zastosować ROLLBACK :

ROLLBACK TO SAVEPOINT nazwa_savepoint

na koncu transakcji, i wskazać gdzie ma to mieć miejsce, to jednak czyni transakcje nie SPÓJNĄ, więc generalnie warto zrezygnować z SAVEPOITN i po prostu dodać ROLLBACK - w ramach wystąpienia błędu w którymś z kwerend 

 current transaction is aborted - to jest wskazanie na błąd, dlaczego się tak dzieje ? 

Ponieważ zażądałeś kontroli nad transakcji zdalnie, a jej nie kontrolujesz - uwzględniając to co pisałem 
 

komentarz 26 maja przez ANONIM2137 Początkujący (320 p.)

Ok, dzięki za wytłumaczenie, a co jeśli bym chciał zastosować COMMIT? Jak by miało to wyglądać? Ponadto przy INSERT wyskakuje mi błąd 42601.

komentarz 26 maja przez Wiciorny Mędrzec (155,400 p.)

Generalnie idea jest taka... COMMIT oznacza - wykonanie, ROLLBACK cofnięcie zmian, nic nie stoi na przeszkodzie aby napisac 

BEGIN TRANSACTION
.....
IF WARUNEK 
    COMMIT TRANSACTION
ELSE
    ROLLBACK TRANSACTION

NATOMIAST jeśli zrobisz samo COMMIT; to z automatu,  tak jak w definicj itransakcji ( wykona się albo w całości, albo wcale) - jeśli zajdzie błąd transakcji to wtedy automatycznie robiony jest ROLLBACK, także ROLLBACK pisac nie musisz.
Chyba, że tak jak u Ciebie ustawione zostało 

SAVEPOINT  

wtedy trzeba wskazać że należy ROLLBACK - zrobic do wskazanego punktu zapisu gdzie do "jego momentu" błłędu nie było.
Naturalnie nie musisz pisać ROLLBACK tylko COMMIT

komentarz 26 maja przez ANONIM2137 Początkujący (320 p.)
edycja 26 maja przez ANONIM2137
jeszcze zadam takie pytanie jako iż jestem nowy w tym temacie jak warunek mogę postawić?
komentarz 26 maja przez Wiciorny Mędrzec (155,400 p.)

dla przykładu warunek logiczny 
 

BEGIN TRANSACTION
UPDATE Person.Address
SET AddressLine1 = 'Prosta 51'
WHERE AddressID = 1
UPDATE Person.Address
SET AddressLine1= 'Przyokopowa 31'
WHERE AddressID = 2
COMMIT TRANSACTION

Teraz przykład kiedy samemu możesz dokonać cofnięcia transakcji jeżeli nie robi tego czego od niej oczekujesz

BEGIN TRANSACTION
UPDATE Person.Person
SET Title = 'TS'
WHERE FirstName = 'Ken' AND LastName='Sánchez'
IF @@ROWCOUNT = 2
    COMMIT TRANSACTION
ELSE
    ROLLBACK TRANSACTION

Kiedy się wykona ? 
Taka transakcja aktualizuje tylko dwa wiersze. jeśli się okaże że w wyniku aktualizowania tabeli Person więcej niż 2 wiersze zostały aktualizowane, nastepuje cofnięcie się całej transakcji,  ( nic nie zostanie updatowan'e nawet te 2); 
Czy to ma sens? Czasami ma- zależy, możemy ubsługiwać też warunki logiczne 

komentarz 27 maja przez ANONIM2137 Początkujący (320 p.)
mam jeszcze problem poniewaz inserty sie nie wprowadzja do tabeli w czym moze byc blad?
komentarz 27 maja przez Wiciorny Mędrzec (155,400 p.)
problemów może być wiele, błędnie zdefiniowane tabele, niepoprawne wprowadzane dane czy też struktura niestety nie wiem jak wygląda twoja baza danych, jak diagram zależności, jakie typy danych obsługuje więc trudno mi powiedzieć, a jaki błąd się pojawia ?

Podobne pytania

+1 głos
0 odpowiedzi 107 wizyt
pytanie zadane 10 kwietnia 2020 w HTML i CSS przez new103 Nowicjusz (190 p.)
0 głosów
1 odpowiedź 300 wizyt
pytanie zadane 25 września 2019 w Sprzęt komputerowy przez robis Nowicjusz (180 p.)
–1 głos
1 odpowiedź 452 wizyt
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

84,130 zapytań

132,898 odpowiedzi

293,918 komentarzy

55,554 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...