Zapisz jako PDF

Transkrypt

Zapisz jako PDF
TI:WTBD/DefinicjaDanych
CREATE TABLE ..
CREATE TABLE [IF NOT EXISTS] nazwa
(kol1 typ1 opcje1,
kol2 typ2 opcje2, ..
opcje_tabeli);
opcje kolumn (ogólne):
PRIMARY KEY
DEFAULT wartość
NOT NULL | NULL
REFERENCES tabela2(kol2i) reguła referencyjna
opcje kolumn (niektórych typów):
UNSIGNED
BINARY
ZEROFILL
opcje tabeli:
PRIMARY KEY(kol1, kol2, ...)
INDEX [nazwa] (kol1, kol2, ...)
UNIQUE [nazwa](kol1, kol2, ...)
FOREIGN KEY [nazwa](kol1, kol2, ...) REFERENCES tabela2(kol21,kol22, ...)
[ON DELETE RESTRICT|CASCADE|SET NULL] [ON UPDATE
RESTRICT|CASCADE|SET NULL]
ALTER TABLE ..
DROP TABLE [IF EXISTS] nazwa;
wiąże się z usunięciem wszystkich danych z tabeli, co może mieć dalsze konsekwencje w
przypadku istnienia więzów integralności referencyjnej
Nazwy
W większości systemów tabele przypisane są do baz (zbiorów tabel, i zresztą nie tylko), w
większości instrukcji nazwa tabeli może (lecz nie musi) być poprzedzona nazwą bazy,
oddzieloną kropką:
nazwa_bazy.nazwa_tabeli
jeśli nazwa bazy nie występuje, przyjmowana jest baza domyślna (aktualna).
Typy danych
1.
2.
3.
4.
napisowe (String): CHAR, VARCHAR, TEXT, ...
liczbowe (Numeric): INT, BIGINT, FLOAT, DECIMAL, ...
data i godzina (Datetime): DATE, TIME, TIMESTAMP, ...
przedział czasu (Interval)
Wiele typów dopuszcza modyfikatory określające jakoś ,,rozmiar" -- np. CHAR(10). Powszechnie
stosowanym rozszerzeniem jest typ BLOB i jego warianty. Wartość NULL pasuje do każdego typu.
Nie przewidziano typu BOOLEAN czy analogicznego (dwuwartościowego, który mógłby służyć za typ
wartości wyrażeń logicznych).
UWAGA: SQLite (będziemy używać na ćwiczeniach) ma mocno niestandardowe podejście do typów
danych: deklarowanie typów jest opcjonalne. Kolumny tabel charakteryzują się tzw. afinicznością
typu (type affinity). Afiniczność prowadzi w szeregu sytuacji do automatycznej konwersji typu
danych przy wstawianiu do tabeli danych odmiennych typów. Nie wyklucza jednak możliwości
wstawiania danych ze względu na niezgodność typu.
Modyfikacja (edycja) danych -- elementarz
INSERT -- wstawianie
INSERT INTO nazwa [(kol1, ...)] VALUES (war1, ...);
wiele systemów dopuszcza więcej niż jedną listę wartości w jednym INSERT; SQLite
akurat nie.
DELETE -- usuwanie
DELETE FROM tabela WHERE warunek;
warunek jest opcjonalny, ale jeżeli go nie ma -- usunięte zostaną wszystkie wiersze