Chciałbym poświęcić kilka słów na temat użycia SQL’a oraz jego instrukcji, które nie są zbyt często opisywane w różnych tutorialach i kursach. Dzisiejszy artykuł będzie pierwszym z cyklu „jak to działa” 😉 Aby przetestować przykłady znajdujące się poniżej, musimy zaopatrzyć się w bazę PostgreSQL lub MS SQL.
Na potrzeby dzisiejszego kursu stworzymy tabelę users:
CREATE TABLE users(
id SERIAL PRIMARY KEY,
login VARCHAR(16),
password VARCHAR(20) CHECK(LENGTH(password) BETWEEN 6 AND 14)
)
Tabela zawierać będzie 3 pola: id typu serial(INT IDENTITY(1,1) w MS SQL; INT AUTO_INCREMENT w MySQL), oraz login i password typu VARCHAR.
CHECK to instrukcja, którą możemy użyć podczas tworzenia/edycji tabeli za pomocą CREATE/ALTER. Polega ona na sprawdzeniu określonego warunku podczas wprowadzania danych przy pomocy instrukcji INSERT na poziomie samej bazy danych.
W naszej przed chwilą stworzonej tabeli postanowiliśmy, że długość hasła powinna mieścić się w przedziale od 6 do 14 liter:
CHECK(LENGTH(password) BETWEEN 6 AND 14);
Spróbujmy teraz wstawić nowy rekord i sprawdźmy czy to zadziała:
INSERT INTO users (login, password) VALUES('snipe', 'bla');
Konsola SQL powinna nam wypisać:
ERROR: new row for relation "users" violates check constraint "users_password_check"
Stan SQL:23514
SQL wyświetlił błąd pokazując, że nasz ogranicznik działa. Ten sam efekt możemy osiągnąć tworząc tabelę bez instrukcji CHECK, a następnie dodać:
ALTER TABLE users ADD CONSTRAINT users_password_check CHECK (LENGTH(password) BETWEEN 6 AND 14);
Co nam to daje? Nazwanie ogranicznika umożliwia odwołanie się do niego później, np. w celu jego usunięcia:
ALTER TABLE users DROP CONSTRAINT users_password_check;
W instrukcji CHECK możemy wprowadzać te same ograniczenia co podczas szukania w klauzuli WHERE, także nie powinniśmy mieć z tym najmniejszych problemów. Ograniczenia mogą być dosyć złożone, a jedyne co nas powstrzymuje to nasza wyobraźnia i określone potrzeby.
Jak zawsze, musi być jednak pewne ale…
Nie każdy system bazodanowy obsługuje instrukcję CHECK(choć znajduje się w standardzie SQL-92), w tym również jedna z częściej używanych baz danych – MySQL(przynajmniej do wersji 5.0.45). Zawsze pozostaje jednak jakaś alternatywa – w postaci np.: PostgreSQL i MS SQL.
W następnej części cyklu opowiem trochę o widokach 🙂
wprowadzania danych przy pomocy instrukcji SELECT na poziomie samej bazy danych.
Powinno być chyba „INSERT” zamiast „SELECT”
oczywiście że INSERT, dzięki za uwagę 🙂