Wykład 2 SQL 1 Structured Query Lenguage
SQL (Structured Query Language) Język zapytań do bazy danych. IBM lata osiemdziesiąte. Stosowany w systemach zarządzania bazami danych (DBMS); Oracle, Paradox,Access, MySQL itd. Pierwsza implementacja Oracle 1979 SQL jest podjęzykiem danych. Sposoby używania SQL-a Interaktywny lub samodzielny SQL. Wprowadzany przez użytkownika w drodze interakcji z programem. Statyczny SQL. Zaszyty w kodzie programu wynikowego. Dwie wersje (zanurzony, modułowy). Dynamiczny SQL. Kod SQL-a generowany przez aplikację w czasie jej wykonywania
Cechy języka SQL: 1.SQL jest językiem nieproceduralnym. Nie ma instrukcji sterujących procesem wykonywania programu. Decyzje o sposobie wykonania programu pozostawia DBMS. 2. Trójwartościowa logika (3VL). Oprócz prawdy [TRUE] i fałszu [FALSE] wprowadza trzecią wartość logiczną [NULL]. Opisuje ona fakty nieznane. 3. Instrukcje SQL są grupowane wg. funkcji
Główne grupy instrukcji SQL-a Język definicji danych (DDL, tworzenie różnych obiektów) CREATE SCHEMA, CREATE TABLE, CREATE VIEW CREATE ASSERTION, CREATE DOMAIN, CREATE INDEX. Język manipulowania danymi(dml) SELECT, INSERT, UPDATE, DELETE. Instrukcje sterowania danymi. GRANT, REVOKE.
Tworzenie bazy danych Schematem nazywamy zbiór obiektów bazy danych znajdujących się pod kontrolą jednego użytkownika. CREATE SCHEMA DATABASE Składnia CREATE SCHEMA DATABASE [IF NOT EXISTS] klauzula nazwy schematu [ DEFAULT CHARACTER SET zbiór znakowy ] [ { CREATE DOMAIN instrukcja CREATE TABLE instrukcja CREATE VIEW instrukcja GRANT instrukcja CREATE ASSERTION instrukcja CREATE CHARACTER SET instrukcja CREATE COLLATION instrukcja CREATE TRANSLATION instrukcja [ zbiór znakowy] } ]...;
klauzula nazwy schematu ::= nazwa schematu AUTHORIZATION identyfikator uprawnień nawa schematu AUTHORIZATION identyfikator uprawnień Przykład CREATE SCHEMA DATABASE Schemat_Janka AUTHORIZATION Janek DEFAULT CHARACTER SET ASCII CREATE DOMAIN id_num AS integer CHECK (VALUE > 0) CREATE GLOBAL TEMPORARY TABLES Nieregularna ( nr_elem id_num PRIMARY KEY, nazwa_elem CHAR NOT NULL, cena_pocz DEC, cena_max DEC, cena_min DEC, cena_sred DEC, ON COMMIT PRESERVE ROWS ) GRANT SELECT ON Nieregularna TO Tomek
CREATE DATABASE pojazd; W tym przypadku zostaną użyte wartości domyślne ustawione w procesie instalacji DBMS-a. SET SCHEMA ALTER DATABASE nazwa schematu Instrukacja ta pozwala na dokonywanie zmian w ustawionym schemacie. ALTER {DATABASE SCHEMA} [nazwa_bazy] [DEFAULT] CHARACTER SET [=] nazwa zbioru znaków [DEFAULT] COLLATE [=] nazwa porównań [pozostale zmiany]
DROP SCHEMA DATABASE Kasuje całą bazę danych wraz ze wszystkimi tabelami. DROP {DATABASE SCHEMA} [IF EXISTS] nazwa bazy [IF EXISTS] wykonuje polecenie gdy istnieje podana nazwa
CREATE [ {GLOBAL LOCAL} TEMPORARY] TABLE [IF NOT EXISTS] nazwa tabeli (Definicja tabeli) [Opcje tabeli] Definicja tabeli Typ danych [NOT NULL NULL] [DEFAULT domyślna] [AUTO_INCREMENT] [UNIQUE [KEY] [PRIMARY] KEY] [COMMENT ciąg znaków'] [definicja referencji] [NOT NULL] wartość pola nie może być pusta [NULL] pusta wartość pola [DEFAULT] domyślna wartość pola [AUTO_INCREMENT] automatyczna numeracja [UNIQUE KEY] klucz unikalny [PRIMARY KEY] klucz główny [COMMENT] komentarz
definicja referencji: REFERENCES nazwa_tabeli (indeks_kolumny,...) [MATCH FULL MATCH PARTIAL MATCH SIMPLE] [ON DELETE opcje referencji] [ON UPDATE opcje referencji] Indeks kolumny: nazwa_kolumny [(długość)] [ASC DESC] Opcje referencji RESTRICT CASCADE SET NULL NO ACTION Użycie RESTRICT oznacza, że z usuwanej tablicy nie mogą korzystać w danej chwili perspektywy lub ograniczenia. CASCADE powoduje usunięcie razem z tablicą wszystkich obiektów ktore z niej korzystają
Typ danych: BIT[(length)] // typ zero-jedynkowy Typy całkowite TINYINT[(długość)] [UNSIGNED] [ZEROFILL] SMALLINT[(długość)] [UNSIGNED] [ZEROFILL] MEDIUMINT[(długość)] [UNSIGNED] [ZEROFILL] INT[(długość)] [UNSIGNED] [ZEROFILL] INTEGER[(długość)] [UNSIGNED] [ZEROFILL] BIGINT[(długość)] [UNSIGNED] [ZEROFILL] Typy zmiennoprzecinkowe REAL[(długość, ilość miejsc)] [UNSIGNED] [ZEROFILL] DOUBLE[(długość, ilość miejsc)] [UNSIGNED] [ZEROFILL] FLOAT[(długość, ilość miejsc)] [UNSIGNED] [ZEROFILL] DECIMAL[(długość[, ilość miejsc])] [UNSIGNED] [ZEROFILL] NUMERIC[(długość[, ilość miejsc])] [UNSIGNED] [ZEROFILL]
Typy tekstowe/binarne: CHAR[(długość)] [CHARACTER SET nazwa_zbioru_znaków] [COLLATE nazwa_porównania] VARCHAR(długość) [CHARACTER SET nazwa_zbioru_znaków] [COLLATE nazwa_porównania] BINARY[(długość)] VARBINARY(długość) TINYBLOB BLOB MEDIUMBLOB LONGBLOB TINYTEXT TEXT MEDIUMTEXT LONGTEXT [BINARY] [CHARACTER SET nazwa_zbioru_znaków] [COLLATE nazwa_porównania
Typy wyliczeniowe: ENUM(wartość1,wartość2,wartość3,...) [CHARACTER SET nazwa_zbioru_znaków] [COLLATE nazwa_porównania] SET(wartość1,wartość2,wartość3,...) [CHARACTER SET charset_name] [COLLATE nazwa_porównania] Typy określające czas: DATE TIME TIMESTAMP DATETIME YEAR
Opcje Tabeli: {ENGINE TYPE} [=] nazwa_silnika AUTO_INCREMENT [=] wartość AVG_ROW_LENGTH [=] wartość [DEFAULT] CHARACTER SET [=] nazwa_zbioru_znaków CHECKSUM [=] {0 1} [DEFAULT] COLLATE [=] nazwa_porównania COMMENT [=] ciąg znaków' CONNECTION [=] adres' DATA DIRECTORY [=] ' ścieżka do katalogu ' DELAY_KEY_WRITE [=] {0 1} INDEX DIRECTORY [=] ścieżka do katalogu' INSERT_METHOD [=] { NO FIRST LAST } MAX_ROWS [=] wartość MIN_ROWS [=] wartość PACK_KEYS [=] {0 1 DEFAULT} PASSWORD [=] ciąg znaków' ROW_FORMAT [=] {DEFAULT DYNAMIC FIXED COMPRESSED REDUNDANT COMPACT} UNION [=] (nazwa_tabeli[, nazwa_tabeli]...)
Przykład tabeli CREATE TABLE auto ( numer_nadwozia int NAZWA char(32), DATA_PRODUKCJI date, NUMER int, WAGA float, Obrazek blob, Opis text, PRIMARY KEY(numer_nadwozia) );
Usuwanie tabeli DROP TABLE nazwa tablicy CASCADE RESTRICT DROP TABLE auto; Modyfikacja tabeli ALTER [IGNORE] TABLE nazwa tabeli [alter_specification]
Specyfikacja modyfikacji ADD [COLUMN] nazwa_kolumny definicja_kolumny [FIRST AFTER nazwa_kolumny ] ADD [COLUMN] (nazwa_kolumny definicja_kolumny,...) ADD {INDEX KEY} [nazwa_indeksu] [typ_indeksu] (nazwa_indeksu_kolumny,...) [typ_indeksu] ADD [CONSTRAINT [symbol]] PRIMARY KEY [typ_indeksu] (nazwa_indeksu_kolumny,...) [typ_indeksu] ADD [CONSTRAINT [symbol]] UNIQUE [INDEX KEY] [typ_indeksu] [typ_indeksu] (nazwa_indeksu_kolumny,...) [typ_indeksu] ADD [FULLTEXT SPATIAL] [INDEX KEY] [nazwa_indeksu] (nazwa_indeksu_kolumny,...) [typ_indeksu] ADD [CONSTRAINT [symbol]] FOREIGN KEY [nazwa_indeksu] (nazwa_indeksu_kolumny,...) definicja_referencji
ALTER [COLUMN] nazwa_kolumny {SET DEFAULT literał DROP DEFAULT} CHANGE [COLUMN] stara_nazwa_kolumny nowa_nazwa_kolumny definicja_kolumny [FIRST AFTER nazwa_kolumny] MODIFY [COLUMN] nazwa_kolumny definicja_kolumny [FIRST AFTER nazwa_kolumny] DROP [COLUMN] nazwa_kolumny DROP PRIMARY KEY DROP {INDEX KEY} nazwa_indeksu DROP FOREIGN KEY fk_symbol
DISABLE KEYS ENABLE KEYS RENAME [TO] nowa_nazwa_tabeli ORDER BY nazwa_kolumny [, nazwa_kolumny]... CONVERT TO CHARACTER SET nazwa_zbioru_znaków [COLLATE collation_name] [DEFAULT] CHARACTER SET [=] nazwa_zbioru_znaków [COLLATE [=] nazwa_porównania] DISCARD TABLESPACE IMPORT TABLESPACE