/DefinicjaDanych
Z Brain-wiki
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]
- opcje kolumn (ogólne):
- 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
- 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