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