1. typy danych TINYINT[(M)] -128 TO 127 [0 to 255 if UNSIGNED] SMALLINT[(M)] -32,768 to 32,767 [0 to 65,535] MEDIUMINT[(M)] -8,388,608 to 8,388,607 [0 to 16,777,215] INT[(M)] -/+2.147E+9 [0 to 4.294E+9] BIGINT[(M)] -/+9.223E+18 [0 to 18.45E+18] FLOAT(p) p=0-24 --> "FLOAT" p=25-53 --> "DOUBLE" FLOAT[(M,D)] Min=+/-1.175E-38 Max=+/-3.403E+38 DOUBLE[(M,D)] Min=+/-2.225E-308 Max=+/-1.798E+308 DECIMAL[(M,[D])] Stored as string Max Range = DOUBLE range BIT[(M)] Binary. Display by [add zero | converting with BIN()]. M=1-64 TINYINT(1) Synonym CHAR[(M)] M=0-255 Characters VARCHAR(M) M=0-65,535 Characters TINYTEXT 0-255 Characters TEXT 0-65,535 Char's MEDIUMTEXT 0-16,777,215 Char's LONGTEXT 0-4,294,967,295 Char's BINARY[(M)] M=0-255 bytes VARBINARY(M) 0-65,535 bytes TINYBLOB 0-255 bytes BLOB 0-65,535 bytes MEDIUMBLOB 0-16,777,215 bytes LONGBLOB 0-4,294,967,295 bytes ENUM ("A1","A2",...) Column is exactly 1 of 1-65,535 values SET ("A1","A2",...) Column is 0 or more values in list of 1-64 members DATE "1000-01-01" - "9999-12-31" DATETIME "1000-01-01 00:00:00" - "9999-12-31 23:59:59" TIME "-838:59:59" - "838:59:59" TIMESTAMP 19700101000000 - 2037+ YEAR 1900 - 2155 2. Nadklucz - zbiór atrybutów, który jednoznacznie wyznacza krotkę. Klucz kandydujący - nadklucz, który nie zawiera właściwego podzbioru będącego nadkluczem relacji - unikalność - minimalność Klucz główny - klucz kandydujący wybrany, by jednoznacznie odnajdować krotki w relacji. Klucz alternatywny - klucz kandydujący, który nie jest kluczem głównym. Przykład: Pracownik NrPrac Imie Nazwisko Telefon Dzial 100 Maria Jackowska 2858879 Ksiegowosc 200 Krzysztof Niski 2870098 Marketing 300 Halina Jakubiec 2879981 Finanse 400 Regina Jamna 2851273 Ksiegowosc 500 Jakub Nestor NULL Informatyka 600 Ryszard Wujec 2870123 Informatyka Nadklucze: {NrPrac, Imię, Nazwisko}, {Imię, Nazwisko}, NrPrac - przy założeniu, że nie ma dwóch osób o tym samym imieniu i nazwisku. Klucze kandydujące: {Imię, Nazwisko} lub NrPrac W przypadku, gdy istnieje więcej kluczy wybieramy jeden nazywając go kluczem głównym (PRIMARY KEY), a pozostałe nazywamy kluczami kandydującymi (CANDIDATE KEY). NrPrac - klucz główny {Imię, Nazwisko} - klucz alternatywny Klucz obcy - Atrybut bądź zbiór atrybutów z jednej relacji, który opowiada kluczowi kandydującemu pewnej (być może tej samej) relacji. Mówimy o relacji podrzędnej i nadrzędnej. 3. tworzenie tabel CREATE TABLE - szczegóły PRIMARY KEY - klucz główny NULL / NOT NULL - dopuszcza/nie dopuszcza wartości NULL AUTO INCREMENT - automatycznie zwiększa o 1 (dla wartości całkowitych) DEFAULT VALUE - wartość domyślna 4. modyfikacje tabel ALTER TABLE tbl_name | ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ] | ADD [COLUMN] (col_name column_definition,...) | CHANGE [COLUMN] old_col_name new_col_name column_definition | MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name] | DROP [COLUMN] col_name | RENAME [TO] new_tbl_name CREATE TABLE `zajecia`.`test` ( `nazwa` varchar(45) NOT NULL default '', `miasto` varchar(45) NOT NULL default '', `wiek` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`nazwa`)) ALTER TABLE test ADD COLUMN id INTEGER AUTOINCREMENT ALTER TABLE test DROP test; 5. usuwanie tabel DROP TABLE 6. odczytywanie schematu relacji DESC TABLE DDL - DATA DEFINITION LANGUAGE 7. wstawianie krotek INSERT CREATE TABLE Student( Indeks INTEGER PRIMARY KEY, Imie VARCHAR(20) NOT NULL, Nazwisko VARCHAR(20) NOT NULL, Rok VARCHAR(3), Data_Ur DATE); INSERT INTO Student VALUES(12345,'Jan','Kowalski','II','1983-11-11'); INSERT INTO Student(Indeks,Imie,Nazwisko) VALUES(12346,'Piotr','Nowak'); INSERT INTO Student(Imie, Nazwisko) VALUES('Maria','Cicha'); Wstawienie kilku krotek: INSERT INTO Student VALUES (12347,'Ewa','Noga','II','1983-01-01'), (12348,'Elżbieta','Kowal','II','1983-04-04'), (12349,'Marek','Bartecki','II','1983-07-21'); Wstawienie fragmentu jednej relacji do innej relacji: INSERT INTO relacja1 SELECT .... FROM relacja2 WHERE .... Skopiuj imiona studentów do relacji Imiona: CREATE TABLE Imiona( Imie Varchar(20) NOT NULL); INSERT INTO Imiona SELECT DISTINCT Imie FROM Student; 8. usuwanie krotek a) usuwanie krotek spełniających pewien warunek DELETE FROM nazwa_tabeli WHERE warunek b) usunięcie wszystkich krotek z tabeli DELETE FROM nazwa_tabeli c) szybkie usunięcie krotek z tabeli TRUNCATE [TABLE] nazwa_tabeli d) usuwanie z kilku tabel DELETE t1, t2 FROM t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id; lub DELETE FROM t1, t2 USING t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id; Przykłady: Usuń pracowników działu Informatyka DELETE FROM Pracownik WHERE Dzial='Informatyka'; Usuń pracowników, którzy nie są przypisani do żadnego projektu DELETE FROM Pracownik WHERE NrPrac NOT IN (SELECT DISTINCT NrPrac FROM Przydzial); Usuń wszystkie dane z tabeli Pracownik DELETE FROM Pracownik; TRUNCATE Pracownik; TRUNCATE TABLE Pracownik; Schemat tabeli pozostaje w bazie danych - usuwane są jedynie dane 9. modyfikowanie krotek UPDATE nazwa_tabeli SET atr = wyrazenie WHERE warunek SET określa, które atrybuty modyfikować i jakie im przypisywać wartości WHERE określa, które krotki modyfikować jeśli nie ma części WHERE, modyfikowane są wszystkie krotki Przykłady: Jakub Nestor otrzymał telefon UPDATE Pracownik SET Telefon = 2877728 WHERE NrPrac=500; Ustalono za duże wymagania czasowe względem realizacji projektów w dziale finansowym UPDATE Projekt SET MaxGodzin=MaxGodzin*1.5 WHERE Dzial='Finanse'; Okazuje się, że dla projektu 1000 potrzeba 2 razy tyle czasu ile do tej pory przy nim przepracowano UPDATE Projekt SET MaxGodzin=2 * (SELECT SUM(GodzinPrzepr) FROM Przydzial WHERE ProjektID = 1000) WHERE ProjektID=1000; 10. wstawianie krotek z pliku LOAD DATA INFILE nazwa_pliku INTO TABLE relacja FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';