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

Wykonałem zapytanie z pliku "nazwapliku.sql" i wyskoczył mi błąd.

Object Storage Arubacloud
0 głosów
686 wizyt
pytanie zadane 3 października 2015 w SQL, bazy danych przez Krzysiek_34 Mądrala (6,050 p.)

Wykonałem używając opcji importu w phpMyAdmin zapytanie z pliku "nazwapliku.sql" i wyskoczył mi błąd: #1046 - No database selected.

W tym pliku SQL jest zapis:

CREATE TABLE IF NOT EXISTS users (
  id int(1) NOT NULL AUTO_INCREMENT,
  login varchar(32) NOT NULL,
  password varchar(60) NOT NULL,
  email varchar(255) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY (login, email)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Co jest błędem? Jak uważacie?

2 odpowiedzi

+1 głos
odpowiedź 3 października 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)

Uważam, że powinieneś samemu zorientować się jaki jest błąd...

Znasz angielski? Jeśli nie to żaden problem. Jedziemy - tłumacz Google zawsze pomoże i mówi:

# 1046 - Nie wybrano bazy danych.

No i co, już wiesz gdzie jest błąd???

Jeśli dalej nie wiesz to podpowiem ale wydaje mi się, że komunikat po polsku jest w miarę prosty. Zwyczajnie nie wybrałeś bazy danych, wystarczy tylko kliknąć na liście baz po lewej stronie czy też wybrać zakładkę "Bazy danych" i tam wejść do jakiejś bazy danych i dopiero tam wykonać zapytanie.

komentarz 3 października 2015 przez Krzysiek_34 Mądrala (6,050 p.)

Trochę znam angielski, ale pomyślałem, że przyczyna tkwi też w czym innym, bo niektóre komunikaty są nie do końca logiczne.

Mam do wyboru 2 pliki SQL i chciałbym wybrać tylko jednego z nich:

Plik nr 1:

CREATE TABLE `users`(
	id INT NOT NULL AUTO_INCREMENT,
	login varchar(30),
	password varchar(40),
	email varchar(50),
	PRIMARY KEY(id)
)

Plik nr 2:

CREATE TABLE IF NOT EXISTS users (
  id int(1) NOT NULL AUTO_INCREMENT,
  login varchar(30) NOT NULL,
  password varchar(40) NOT NULL,
  email varchar(50) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY (login, email)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Który z podanych plików SQL jest lepszy i bezbłędny?

komentarz 3 października 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)
Wg mnie akurat SQL ma bardzo dobre komunikaty które przeważnie dość jasno mówią o co chodzi... Tak jak przykładowo ten, który dostałeś.

Co do tych kodów to obydwa wydają się być bezbłędne, a który jest lepszy to Ci nie powiem - zależy kto czego potrzebuje. W kodzie drugim mamy określone, że tabela zostanie stworzona tylko jeśli już nie istnieje tabela o takiej nazwie, że wszystkie pola nie mogą pozostać puste przy dodawaniu rekordu (not null), jest też ustalone że zarówno login jak i email nie mogą się powtórzyć (unique) oraz ustalony silnik na InnoDB i kodowanie znaków. W pierwszym kodzie tych rzeczy nie ma. Co jest lepsze to jak mówiłem zależy do czego to potrzebujesz - jeśli np. chcesz aby ktoś mógł mieć dwa konta na ten sam email (zakładam że to jest jakiś system użytkowników) no to wtedy nie możesz dać unique dla emaila. Ogólnie raczej kod drugi byłby lepszy bo określa że pola nie mogą być puste i określa tą unikalność loginu i emaila ale powtórzę jeszcze raz, że wszystko zależy od tego co kto chce zrobić i jak dokładnie to coś ma działać.
komentarz 3 października 2015 przez Krzysiek_34 Mądrala (6,050 p.)
OK, dzięki za kolejną wskazówkę.

Zastosuję kod nr 2, ponieważ jeżeli podczas rejestracji mam pole 'login', 'e-mail' i 'hasło' i nie wypełni się któregoś z tych pól, to wyskoczy komunikat, że nie wszystkie pola są wypełnione albo komunikat, że login jest już zajęty. Ja nie chcę, aby ktoś mógł mieć założone 2 konta na ten sam e-mail.

O to chodzi, co nie?
komentarz 3 października 2015 przez writen Nałogowiec (29,060 p.)
Drugi kod wydaje się być lepszy.

Jeśli chcesz wiedzieć co dane słówka oznaczają, to poszukaj jakiś materiałów na temat języka SQL i konstruowania zapytań.
komentarz 3 października 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)
Tak, o to chodzi ale nie licz na to, że wyskoczy Ci ładny komunikat o tym, że taki login czy email jest już zajęty i masz problem z głowy - musisz to sprawdzić samemu wcześniej, a tutaj jest to po prostu ostatecznym zabezpieczeniem i gdy będziesz próbował dodać rekord z powtórzonymi danymi w kolumnie z nałożonym unique to rzuci jakiegoś errora i nie doda. Podczas rejestracji musisz samemu sprawdzić czy takie dane nie zostały już użyte, a to jak mówiłem jest ostateczne zabezpiecznie żeby w razie jakiegoś innego błędu nie rozwalić systemu poprzez przykładowo stworzenie konta o już zajętym loginie.
0 głosów
odpowiedź 3 października 2015 przez writen Nałogowiec (29,060 p.)
Nie wybrałeś bazy danych. W phpMyAdmin po lewej stronie. Jak nie masz tam bazy danych to ją utwórz.

Angielski to naprawdę taka trudna rzecz?
komentarz 3 października 2015 przez Krzysiek_34 Mądrala (6,050 p.)

Angielski nie jest trudny. Ja miałem w szkołach tylko niemiecki i w tej sytuacji samodzielnie doszkalam się w angielskim.smiley

komentarz 3 października 2015 przez writen Nałogowiec (29,060 p.)
To tak na przyszłość powiem. Istnieje coś takiego jak translator google, w większości przypadków jest niezawodny. Wystarczy przekopiować tam komunikat błędu.

Jest to naprawdę pomocna rzecz.

Podobne pytania

0 głosów
1 odpowiedź 242 wizyt
pytanie zadane 18 czerwca 2019 w SQL, bazy danych przez Maikel11 Początkujący (470 p.)
0 głosów
2 odpowiedzi 394 wizyt
pytanie zadane 13 lipca 2018 w SQL, bazy danych przez Zero Dyskutant (8,210 p.)
0 głosów
1 odpowiedź 152 wizyt
pytanie zadane 17 listopada 2017 w SQL, bazy danych przez EltraEden Użytkownik (590 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...