SQL i tworzenie tabel w bazie danych
14 July 2008
Comments
W warsztacie dotyczącym zapisywania danych do bazy danych stworzyliśmy tabelę takim oto poleceniem:
CREATE TABLE `news` (
`news_id` smallint(5) unsigned NOT NULL auto_increment,
`news_title` varchar(255) default NULL,
`news_text` text,
PRIMARY KEY (`news_id`)
) ENGINE=MyISAM;
Polecenie CREATE TABLE tworzy tabelę o podanej nazwie i z określonymi dalej kolumnami (polami). Definicje pól znajdują się wewnątrz zwykłych nawiasów i oddzielone są od siebie przecinkami. Definicja danego pola ma strukturę:
nazwa_pola typ parametry
Gdzie parametry są opcjonalne, np:
news_text text,
parametrów nie posiada, tworzy pole news_text typu text.Tworząc pola w tabeli bazy danych określamy jego typ. Od jego wyboru zależy jakie dane będziemy mogli wprowadzić do danego pola.
| CHAR (m) | Łańcuch o stałej długości M z zakresu od 1 do 256 znaków. Do łańcucha dodawane są znaki spacji uzupełniające jego długość |
| VARCHAR (m) | Pole znakowe o zmiennej długości M z zakresu od 1 do 256 znaków. Spacje nie są dodawane. |
| BLOB, TEXT | Dane binarne lub tekstowe o rozmiarze nie przekraczającym 65 535 bajtów |
| TINYINT | 1-bajtowe pole, przechowujące wartości całkowite od 0 do 255 dla UNSIGNED, normalnie -127 do 127 |
|
SMALLINT |
Podobne pole, dla UNSIGNED przyjąć może wartości od 0 do 65 535 lub -32 768 do 32 768 bez UNSIGNED |
| MEDIUMINT | Zakres dla UNSIGNED: od 0 do 16 777 215, normalnie od -8 388 608 do 8 388 608 |
| INT | Normalny zakres: od -2 147 483 648 do 2 147 483 647 lub z UNSIGNED od 0 do 4 294 967 295 |
| BIGINT | Używany do przeprowadzania operacji matematycznych (obliczenia itp.) |
| FLOAT (m,d) | Liczba zmiennoprzecinkowa o pojedynczej precyzji złożona z m liczb i d miejsc dziesiętnych |
| DOUBLE (m,d) | 8-bajtowa liczba zmiennoprzecinkowa o podwójnej precyzji złożona z m liczb i d miejsc dziesiętnych |
| DECIMAL (m, d) | Liczba dziesiętna reprezentowana przez łańcuch m cyfr, z których d jest na prawo od separatora części dziesiętnej |
| DATE | Data wyświetlana w formacie Rok-miesiąc-dzień, np: 2004-08-12. |
| DATETIME | Data i czas o formacie Rok-Miesiąc-dzień godzina:minuty:sekundy. Np. 2004-02-23 13:34:45 |
| TIMESTAMP | Data i czas liczony od początku epoki UNIXa jako znacznik czasu - zwraca liczbę sekund jaka upłynęła od 1970 roku |
| TIME | Czas gg:mm:ss 08:30:12 |
Każda "normalna" tabela powinna zawiera pole auto_increment (MySQL) czy też SERIAL dla postgresa. W powyższym przykładzie mamy: `news_id` smallint(5) unsigned NOT NULL auto_increment, Zaletą pól tego typu jest to że automatycznie ich wartość wzrasta o jeden przy dodawaniu wpisów, przy ich kasowaniu licznik nie zmienia się tj. nowy wpis nigdy nie dostanie ID istniejącego wcześniej wpisu ani też numery ID same się nie przestawią. Wartości pól auto_increment są unikalne i na ich podstawie bardzo łatwo można wykonywać operacje na określonym wpisie takie jak kasowanie czy edycja.
Od poprawnej struktury tabel w bazie danych i dobrze napisanych zapytań zależy wydajność całej naszej aplikacji. W dalszych warsztatach gdy będziemy tworzyć bardziej złożone komponenty problemy tego typu pojawią się i będą omówione jak należy :)
RkBlog
Comment article