/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]
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. napisowe (String): CHAR, VARCHAR, TEXT, ...
  2. liczbowe (Numeric): INT, BIGINT, FLOAT, DECIMAL, ...
  3. data i godzina (Datetime): DATE, TIME, TIMESTAMP, ...
  4. 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