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

MYSQL-zadanie domowe sprawdzenie

Object Storage Arubacloud
+1 głos
330 wizyt
pytanie zadane 26 maja 2021 w SQL, bazy danych przez ANONIM2137 Początkujący (300 p.)
edycja 27 maja 2021 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 2021 przez Wiciorny Ekspert (269,590 p.)
wybrane 26 maja 2021 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 2021 przez ANONIM2137 Początkujący (300 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 2021 przez Wiciorny Ekspert (269,590 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 2021 przez ANONIM2137 Początkujący (300 p.)
edycja 26 maja 2021 przez ANONIM2137
jeszcze zadam takie pytanie jako iż jestem nowy w tym temacie jak warunek mogę postawić?
komentarz 26 maja 2021 przez Wiciorny Ekspert (269,590 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 2021 przez ANONIM2137 Początkujący (300 p.)
mam jeszcze problem poniewaz inserty sie nie wprowadzja do tabeli w czym moze byc blad?
komentarz 27 maja 2021 przez Wiciorny Ekspert (269,590 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 210 wizyt
pytanie zadane 10 kwietnia 2020 w HTML i CSS przez new103 Nowicjusz (190 p.)
0 głosów
1 odpowiedź 640 wizyt
pytanie zadane 25 września 2019 w Sprzęt komputerowy przez robis Nowicjusz (180 p.)
–1 głos
1 odpowiedź 752 wizyt

92,536 zapytań

141,376 odpowiedzi

319,451 komentarzy

61,920 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...