Naučili smo se že ustvariti, spremeniti in zbrisati tabelo. Do sedaj smo uporabili samo dva podatkovna tipa in sicer INT
in VARCHAR(x)
. Poglejmo še ostale podatkovne tipe, ki jih lahko uporabljamo.
Osnovni tipi, ki jih uporabljamo so:
Številski podatkovni tipi
Najprej si oglejmo numerične vrednosti. Vsak numerični tip INT
je lahko tudi:
UNSIGNED
(nepredznačen)AUTO_INCREMENT
(samoštevilo)ZEROFILL
Če je UNSIGNED
, lahko zasede le pozitivne vrednosti, atribut AUTO_INCREMENT
avtomatsko povečuje numerično vrednost natanko enemu polju v tabeli, ki mora imeti vsaj enega od atributov NOT NULL
, PRIMARY KEY
ali UNIQUE
.
ZEROFILL
zapolni začetek števila z ničlami in privzame še atribut UNSIGNED
. To je uporabno npr. pri telefonskih številkah. Če bi imeli podatkovni tip INT(9)
in bi vnesli telefonsko številko 041123456, bi se dejansko vneslo 41123456. Za pravilno shranjevanje zato uporabimo INT(9) ZEROFILL
. Oznaka M
pomeni največje število števk, D
pa število mest za decimalno vejico.
Poleg vrednosti INT
lahko uporabljamo še sledeče tipe:
Podatkovni tip | Opis |
---|---|
BIT[(M)] |
Bitno polje. M pomeni število bitov v polju med 1 in 64. Privzeta vrednost za M je 1. |
TINYINT[(M)] [UNSIGNED] [ZEROFILL] |
1 bajt - uporabljamo ga, kadar zasede argument majhne vrednost. Lahko hrani števila med 0 in 255 (28-1), če je unsigned ali od -128 do 127. BOOL in BOOLEAN sta sinonima za TINYINT(1), kjer 0 pomeni narobe (false), neničelne vrednosti pa prav (true). Vrednost TRUE pomeni 1, FALSE pa 0. |
SMALLINT[(M)] [UNSIGNED] [ZEROFILL] |
2 bajta - primeren za števila od 0 do 65535 (216-1), če je unsigned ali od -32768 do 32767 |
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] |
3 bajte - zasede vrednosti od 0 do 16777215 (224-1), obratno niti ne bomo gledali, ker ni tako pomembno |
INT[(M)] [UNSIGNED] [ZEROFILL] /td>
| 4 bajte - od 0 do 4294967295 (232-1). INTEGER je sinonim za INT. |
BIGINT[(M)] [UNSIGNED] [ZEROFILL] |
8 bajtov - razpon 0 do (264-1), se pa uporablja za ogromne vrednosti. |
SERIAL |
je alias za BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE |
FLOAT[(M, D)] [UNSIGNED] [ZEROFILL] |
4 bajte - realno število s plavajočo vejico, enojna natančnost. Npr. FLOAT(7,4) pomeni, da bodo števila prikazana v obliki -999.9999. MySQL izvede zaokroževanje pri shranjevanju podatkov, tako bi v našem primeru vnos števila 999.00009 zaokrožil na 999.0001. |
DOUBLE(M, D) [UNSIGNED] [ZEROFILL] |
8 bajtov - realno število s plavajočo vejico, dvojna natančnost. DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL] in REAL[(M,D)] [UNSIGNED] [ZEROFILL] sta sinonima za DOUBLE. |
DECIMAL[(M[, D])] [UNSIGNED] [ZEROFILL] |
M+1 bajt ali M+2 bajta - realno število shranjeno kot niz, z določeno decimalno vejico. DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL], FIXED[(M[,D])] [UNSIGNED] [ZEROFILL] so sinonimi za DECIMAL. |
Časovni podatkovni tipi
Oglejmo si podatkovne tipe za shranjevanje časa:
Podatkovni tip | Opis |
---|---|
DATE |
Zasede 3 bajte v obliki YYYY-MM-DD: 2011-10-09 (Leto-Mesec-Dan) |
TIME |
Zasede 3 bajte v obliki HH:MM:SS: 19:20:21 (Ura-Minuta-Sekunda) |
DATETIME |
Zasede 8 bajtov v obliki YYYY-MM-DD HH:MM:SS: 2011-10-09 19:20:21 (Leto-Mesec-Dan Ura-Minuta-Sekunda) |
TIMESTAMP |
Zasede 4 bajte v obliki YYYYMMDDHHMMSS; velja do konca leta 2037.: 20111009192021 (brez ločnic zapisan datum in čas) |
YEAR[(2|4)] |
Zasede 1 ali 2 bajta v obliki YYYY ali YY: 2011 ali 11 (leto zapisano s štirimi števkami ima dovoljene vrednosti med 1901 in 2155 ter vrednost 0000 ali dvema števkama dovoljene vrednosti med 70 in 69 in predstavljajo leta med 1970 in 2069) |
Primeri:
SELECT CURDATE() CURRENT_DATE;
#Vrne: 2011-11-14 2011-11-14
SELECT CURTIME() CURRENT_TIME;
#Vrne: 09:37:34 09:37:34
SELECT CURRENT_TIMESTAMP SYSDATE() NOW();
#Vrne: 2011-11-14 09:22:16 2011-11-14 09:22:16 2011-11-14 09:22:16
Zgornji primeri nam prikazuje uporabo funkcij, ki nam vrnejo trenutni datum in/ali čas. Kot vidimo imamo več možnosti za dosego istega rezultata.
Besedilni podatkovni tipi
Podatkovni tipi za shranjevanje nizov oziroma besedila
CHAR(x)
VARCHAR(x)
CHAR
in VARCHAR
sta podobna tipa podatkov za shranjevanje nizov znakov. Razlikujeta se v načinu shranjevanja in vračanja podatkov. Dolžina CHAR podatkovnega tipa je nespremenljiva in hrani toliko znakov, kot smo jih določili ob deklaraciji. Če nismo uporabili vseh znakov, se dopolni s presledki. Ko podatek tipa CHAR vrnemo pa le ta nima končnih presledkov. Tip VARCHAR pa hrani in vrača toliko znakov, kot smo jih uporabili. VARCHAR potrebuje še en ali dva bajta za informacijo o dolžini niza. Tipa zahtevata parameter x, ki pomeni maksimalno število znakov, ki jih lahko hranimo, lahko je od 0 do 255 za CHAR in od 0 do 65535 za VARCHAR.
Primer:
Vrednost | CHAR(4) | Poraba pomnilnika | VARCHAR(4) | Poraba pomnilnika |
---|---|---|---|---|
'' |
' ' | 4 bajte | ' ' | 1 bajt |
'ab' |
'ab ' | 4 bajte | 'ab' | 3 bajte |
'abcč' |
'abcč' | 4 bajte | 'abcč' | 5 bajtov |
'abcčdefg' |
'abcč' | 4 bajte | 'abcč' | 5 bajtov |
Podatkovni tipi za shranjevanje dvojiških nizov znakov oziroma besedila
BINARY(x)
VARBINARY(x)
Sta podobna tipoma CHAR
in VARCHAR
le da vsebujeta dvojiške nize znakov namesto znakovnih. Podobnost je tudi v načinu shranjevanja in vračanja podatkov le da namesto presledkov BINARY
tip dopolnimo z "0x00"
oz. "\0"
. Parameter x
, ki pomeni maksimalno število bajtov in ne znakov kot pri CHAR
in VARCHAR
, ki jih lahko hranimo, lahko je od 0 do 255 za BINARY
in od 0 do 65535 za VARBINARY
.
Primer:
CREATE TABLE bin_test (c BINARY(3));
INSERT INTO bin_test VALUES ('a');
SELECT HEX(c), c = 'a', c = 'a\0\0' FROM bin_test;
#Vrne: HEX(c) c = 'a' c = 'a\0\0' 610000 0 1
Primer potrjuje, kar smo napisali zgoraj. Potem ko smo v polje s podatkovnim tipom BINARY(3)
vnesli 'a'
, se je to polje dopolnilo na 'a\0\0'
.
Podatkovni tipi za shranjevanje dvojiških nizov znakov oziroma besedila brez privzetih vrednosti (DEFAULT)
TEXT
BLOB
TEXT
in BLOB
tipi so zelo podobni VARCHAR
in VARBINARY
tipoma, le da ne moreta imeti privzetih (DEFAULT) vrednosti. TEXT
torej shranjuje znakovne nize, BLOB
pa dvojiške vrednosti. BLOB
pomeni [B]inary [L]arge [OB]jects, torej veliki dvojiški objekti. BLOB
tipi so primerni za shranjevanje vseh vrst datotek.
Poznamo štiri vrste TEXT
in BLOB
tipov:
TINYTEXT
inTINYBLOB
lahko hranita do 28=256 znakov oz. bajtov.TEXT
inBLOB
do 216=65 536 znakov oz. bajtov, kar je 64 kilobajtov.MEDIUMTEXT
inMEDIUMBLOB
224=16 777 216 znakov oz. bajtov, kar je 16 megabajtov.LONGTEXT
inLONGBLOB
pa 232sup>=4 294 967 296 znakov oz. bajtov, kar znaša 4 gigabajte.
Oštevilčenje
ENUM
ENUM
(enumeration oz. oštevilčenje) uporabljamo, kadar želimo stolpcu prirediti eno izmed vnaprej določenih vrednosti (npr. velikost).
CREATE TABLE enum_test ( velikost ENUM('majhno', 'srednje', 'veliko') );
INSERT INTO enum_test (velikost) VALUES ('majhno'), ('veliko');
Vsako oštevilčenje ima svoj indeks oz. mesto za katerega velja, da se številčenje vrednosti začne s številko 1, prazna vrednost ('') ima številko 0, polje brez vrednosti (NULL) pa NULL. Indeks pri oštevilčenju nima nobene povezave z indeksi tabel. V našem primeru:
Vrednost | Indeks |
---|---|
NULL |
NULL |
'' |
0 |
'majhno' |
1 |
'srednje' |
2 |
'veliko' |
3 |
Množica
SET
SET
(množica) je znakovno polje, ki lahko vsebuje nič ali več elementov iz vnaprej določene množice vrednosti, ki jih ločimo z vejico.
CREATE TABLE set_test (korak SET('ena', 'dva'));
INSERT INTO set_test (korak) VALUES ('');
INSERT INTO set_test (korak) VALUES ('ena');
INSERT INTO set_test (korak) VALUES ('dva');
INSERT INTO set_test (korak) VALUES ('ena', 'dva');
Dan primer prikazuje tudi vse možne vrednosti polja korak.