SQL - Cap 4 New

Published on January 2017 | Categories: Documents | Downloads: 55 | Comments: 0 | Views: 391
of 28
Download PDF   Embed   Report

Comments

Content

Cap 4.
Tipuri de date MySQL

Consecinţele alegerii unui tip de date
Criterii de avut in vedere:
- domeniul de valori posibile pentru acea coloana;
- precizia dorita;
- spaţiul ocupat pe hard-disk;
- performanta DBMS in lucrul cu acel tip de date;

InfoAcademy SQL 2015

2

Tipuri de date MySQL
1. Numerice (intregi, zecimale, vigula fixa, virgula
mobila)
2. Temporale
3. Siruri (de octeti, de caractere)
4. Enumerate

InfoAcademy SQL 2015

3

Tipuri de date numerice
Proprietati generale:
Tipurile de date MySQL permit memorarea următoarelor tipuri de
numere:
- intregi (numere fara parte zecimala);
- raţionale. Acestea pot fi memorate in virgula fixa sau in virgula
mobila. Stocarea unora dintre numere in baza de date este subiect
de trunchiere/rotunjire;
Datele numerice sunt implicit cu semn, avand domeniul simetric in
jurul lui zero.
Daca specificam modificatorul UNSIGNED valorile devin pozitive.
Plaja de valori se dubleaza pentru numere intregi (limita superioara
InfoAcademy SQL 2015
4
se dubleaza).

Numere intregi
Tipuri de date si modificatori specifici

Nr.
Tip de date

TINYINT

Sinonime
 

SMALLINT
MEDIUMINT

-

Valori posibile, fara
semn

Octeţi Valori posibile, cu
semn

(unsigned)

1

-128...127

0...255

2

-32768...32767

0...65535

3

-8388608...8388607

0...16777215

InfoAcademy SQL 2015

5

„Lăţimea" unei coloane
In definiţia unei coloane cu tip de date intreg se poate specifica,
opţional, „lăţimea" coloanei - numărul de caractere returnat de MySQL
atunci cand se extrag date de pe acea coloana - prin plasarea sa intre
paranteze imediat dupa tipul de date:
Interfon INT(3)
Lăţimea nu afectează nici domeniul de valori posibile, nici spaţiul de
stocare ocupat: in exemplul de mai sus, valoarea 124 va fi afişată ca
atare, valoarea 12345 va fi si ea memorata si afişată ca atare, iar
valoarea 12 va fi completata la stânga cu spatii inaintea afişării.

InfoAcademy SQL 2015

6

„Lăţimea" unei coloane (continuare)
Atunci cand nu specificam lăţimea unei coloane, MySQL alege
automat aceasta valoare astfel incat sa cuprindă valoarea cea mai
lunga a acelui tip de date (inclusiv eventualul semn minus).
Spre exemplu, o definiţie de coloana
Nr TINIYINT va avea o latime implicita de 4 (3 cifre plus semn).
Modificatorul ZEROFILL va face ca valorile sa fie completate cu
cifre 0 in loc de spatii atunci cand au număr de caractere mai mic
decât lăţimea coloanei. Acest modificator solicita automat si
UNSIGNED.

EXEMPLU:
InfoAcademy SQL 2015

7

Modificatorul AUTO_INCREMENT
Adăugat unei coloane cu tip de date numeric, atributul
AUTO_INCREMENT insereaza o noua valoare numerica egala cu
valoarea maxima existenta plus unu.
O tabela SQL poate avea o singura coloana de tip AUTO_INCREMENT
si acea coloana trebuie declarata ca index.
EXEMPLU:

InfoAcademy SQL 2015

8

Numere fractionare
Numere finite, numere infinite – reprezentare trunchiata.
Memorarea numerelor fracţionare intr-un sistem de calcul se poate face in
doua moduri:
- in virgula fixa - presupune stabilirea de la bun inceput a numărului de
zecimale;
- in virgula mobila - poziţia virgulei in cadrul numărului nu mai este
prestabilita, ci poate varia in funcţie de valoarea memorata. Numărul total
de cifre ce pot fi memorate ramane acelaşi, insa prin schimbarea poziţiei
virgulei pot fi obţinute numere de diferite anverguri si precizii.
Caracteristici:
- In virgula fixa stabilim de la inceput numarul de zecimale, respectiv pozitia
virgulei;
- In cazul virgulei mobile putem muta virgula atat la dreapta cat si la stanga;
InfoAcademy SQL 2015
9
- In virgula fixa memoram valoarea
exacta asteptata (finita sau rotunjita);

Tipuri de date MySQL pentru numere in virgula fixa
Tip de
date

Sinonime

DECIMA DEC
L
NUMERIC
FIXED

Nr. oct. Valori posibile
(precizi
e)

1

In funcţie de parametrii specificaţi.
Maxim 65 de cifre in total, din care
maxim 30 de zecimale.

Caracteristici:
- Exista un singur tip de date in virgule fixa: DECIMAL;
- Se configureaza doi parametri: numarul total de cifre admise si
numarul de zecimale;
- Separatorul zecimal si eventualul semn minus nu se iau in calcul;
- Daca incercam sa introducem valori mai mari in sql_mode strict
vom avea o eroare, in modul nonstrict valoarea va fi trunchiata la
valoarea maxima admisa;
InfoAcademy SQL 2015
CREATE TABLE Produse (Denumire
VARCHAR(100), Pret

10

Tipuri de date MySQL pentru numere in virgula
mobila
Valori posibile
Valori posibile
Tip de
date

Sinonime

Nr.
oct.
(preciz
ie)

cu semn

.
unsigned
FLOAT
4
-3.4xl038...3.4 xl038
0...3.4 x IO38
DOUBLE
DOUBLE PRECISION 8
-1.7 x IO308...1.7 x
0...1.7xl0308
REAL este implicit
sinonim
pentru DOUBLE;
daca insa(aprox.)
se foloseşte
REAL (vezi
nota)
IO308
sql_mode opţiunea REAL_AS_FLOAT,
REAL devine sinonim pentru
(aprox)

FLOAT

CREATE TABLE Persoane (Nume VARCHAR(100), Greutate
FLOAT(5,2))
Exemplu:
InfoAcademy SQL 2015

11

in

Tipuri de date MySQL
1. Numerice (intregi, zecimale, vigula fixa, virgula mobila)
2. Temporale
3. Siruri (de octeti, de caractere)
4. Enumerate

InfoAcademy SQL 2015

12

Tipuri de date temporale
Tip de date
DATE
DATETIME
TIME
YEAR
TIMESTAMP

Valori posibile
1000-01-01 ... 9999-12-31
1000-01-01 00:00:00 ... 9999-12-31 23:59:59
-838:59:59 ... 838:59:59
1901 ... 2155 (pt 4 digiti) 1970 ... 2069 (pt 2 digiti)
1970-01-01 00:00:01 ... 2038-01-09 03:14:07

Caracteristici:
- data calendaristica - tipul de date DATE sub forma AAAA-LLZZ;
- moment in timp (data calendaristica+ora) - tipul de date
DATETIME. Formatul este AAAA-LL-ZZ 00:MM:SS;
- TIMESTAMP - asemanator DATETIME, poate memora automat
timpul curent la INSERT sau UPDATE, folosind atributul
ON_UPDATE_CURRENT_TIMESTAMP.
InfoAcademy SQL 2015

13

Tipuri de date temporale (continuare)
Tip de date

Valori posibile

DATE
DATETIME
TIME
YEAR
TIMESTAMP

1000-01-01 ... 9999-12-31
1000-01-01 00:00:00 ... 9999-12-31 23:59:59
-838:59:59 ... 838:59:59
1901 ... 2155 (pt 4 digiti) 1970 ... 2069 (pt 2 digiti)
1970-01-01 00:00:01 ... 2038-01-09 03:14:07

Caracteristici (continuare):
- interval de timp - tipul de date TIME, care poate fi folosit pentru a
reprezenta atat ora din zi, cat si intervale de timp care pot fi mai mari
de 24h. Formatul este 00:MM:SS sau 000:MM:SS;
- an - tipul YEAR, pe 2 sau pe 4 digiti;
- valorile constante pentru coloane se specifica incadrate in apostroafe,
cu excepţia tipului YEAR reprezentat ca intreg. Lunile sau zilele care au
o singura cifra nu este obligatoriu sa aiba 0 in fata. Ex: '2006-4-13

18:23:45', '104:56:89', 1986
- Fiecare dintre tipurile de date temporale dispune de o valoare
InfoAcademy SQL 2015
14
„zero" a acelui tip de date introdusa automat in modul non-strict.

Tipuri de date temporale (continuare)
INSERT INTO Date(
D DATE,
TS TIMESTAMP,
T TIME,
Y YEAR)
VALUES('2009-04-05',
1986);

'2006-4-13 18:23:45',

'104:56:59',

Particularitati ale TIMESTAMP (“Unix time”
- Numara secundele scurse intre 1 Ian 1970 si 19 Ian 2038 ;
- Poate fi folosita optiunea default CURRENT_TIMESTAMP la
INSERT;
- In consecinta NU va permite NULL automat ca la alte tipuri de
date (introduce timestamp-ul curent), ci doar daca specificam
acest lucru explicit;
InfoAcademy SQL 2015
15
- Poate avea ca modificator
ON UPDATE CURRENT_TIMESTAMP

Tipuri de date MySQL
1. Numerice (intregi, zecimale, vigula fixa, virgula mobila)
2. Temporale
3. Siruri (de octeti, de caractere)
4. Enumerate

InfoAcademy SQL 2015

16

Tipuri de siruri
MySQL oferă utilizatorului posibilitatea de a lucra cu doua tipuri de şiruri:
- şiruri de octeţi - sunt simple succesiuni de numere. Compararea a
doua astfel de şiruri se efectuează numeric, octet cu octet;
- şiruri de caractere - un sir de caractere diferă fundamental de unul de
octeţi prin următoarele aspecte:
- un caracter poate fi reprezentat pe unul sau mai mulţi octeţi (spre
exemplu, un sir de 3 caractere poate avea chiar 9 sau mai mulţi octeţi). Ca
o consecinţa, compararea a doua şiruri de caractere nu mai poate fi făcuta
comparând octeţii componenţi unul cate unul, ci trebuie ţinut cont de
caracterele pe care le reprezintă diversele grupuri de octeţi;
Exemplu: Ţâr care in reprezentare UTF8 are 5 octeţi: (197,162 ; 195, 162 ;
114)
(http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=
dec&unicodeinhtml=dec )

- un sir de caractere are InfoAcademy
asociate
doua proprietăţi care nu se regăsesc
SQL 2015
17
la şirurile de octeţi: character set si collation. Prima stabileşte setul de

Siruri de octeti
Tip de date

Spaţiu ocupat

BINARY(N)
VARBINARY(N)

Nr. maxim de
octeţi
N (N<=255)
N (N<=65535)

N octeţi
Nr. de octeţi al valorii + 1 sau 2 pt
lungime
TINYBLOB
Nr. de octeţi al valorii + 1 octet pt
255
lungime
BLOB
Nr. de octeţi al valorii + 2 octet pt
65535
lungime
MEDIUMBLOB
Nr. de octeţi al valorii + 3 octet pt
16,777,215 (16M)
BYNARY
– caracteristici:
lungime
- siruri de lungime
fixa (N), specificata in definitia coloanei;
LONGBLOB
Nr. de octeţi al valorii + 4 octet pt
4,294,967,295 (4G)
- valorile culungime
lungimi mai mici sunt completate automat cu spatii;

- la extragerea unei astfel de valori din tabela, spatiile din final
sunt eliminate,
de aceea, daca valoarea originala se incheia cu
unul sau mai multe spatii, la extragere ea nu le va mai avea.
InfoAcademy SQL 2015

18

Siruri de octeti (continuare)
Tip de date
BINARY(N)
VARBINARY(N)

Spaţiu ocupat

Nr. maxim de
octeţi
N (N<=255)
N (N<=65535)

N octeţi
Nr. de octeţi al valorii + 1 sau 2 pt
lungime
TINYBLOB
Nr. de octeţi al valorii + 1 octet pt
255
lungime
BLOB
Nr. de octeţi al valorii + 2 octet pt
65535
lungime
MEDIUMBLOB
Nr. de octeţi al valorii + 3 octet pt
16,777,215 (16M)
lungime
VARBYNARY – caracteristici:
LONGBLOB
Nr. de octeţi al valorii + 4 octet pt
- lungime maxima
(N), specificata in definitia4,294,967,295
coloanei; (4G)
lungime

- valorile sunt memorate in tabela exact cum sunt introduce plus
1-2 octeti;
- creste eficienta utilizarii spatiului pe HDD;
- dispare problema cu spatiile prezenta la datele de tip BYNARY
SQL 2015
19
(spatiile de la final vor fi InfoAcademy
pastrate).

Siruri de octeti (continuare)
Tip de date

Spaţiu ocupat

BINARY(N)
VARBINARY(N)

Nr. maxim de
octeţi
N (N<=255)
N (N<=65535)

N octeţi
Nr. de octeţi al valorii + 1 sau 2 pt
lungime
TINYBLOB
Nr. de octeţi al valorii + 1 octet pt
255
lungime
BLOB
Nr. de octeţi al valorii + 2 octet pt
65535
lungime
MEDIUMBLOB
Nr. de octeţi al valorii + 3 octet pt
16,777,215 (16M)
Tipurile de date lungime
BLOB (Binary Large Object)– caracteristici:
LONGBLOB
Nr. de octeţi al valorii + 4 octet pt
4,294,967,295 (4G)
- accepta valori
cu lungime variabila, asemanatoare
cu
lungime

VARBINARY, dar cu valori posibile mult mai mari;
- fiecare valoare va ocupa numarul de octeti corespunzator plus
1-4 octeti pentru mentionarea lungimii.
InfoAcademy SQL 2015

20

Şiruri de caractere
Character set
Character set reprezinta o lista de caractere posibile, fiecare in
corespondenta cu un cod numeric.
- unele seturi sunt reprezentate pe un singur octet (ASCII);
- altele pe 2 octeti - lungime fixa – (UCS2);
- altele ocupa 1-4 octeti – lungime variabila – (UTF8, UTF16, UTF32).
Set de
caractere

Descriere

ASCII

Folosit in engleza americana; fiecare caracter are 7 biti (codurile
au valori <128)

ISO-8859-2
(latin2)

Caracterele folosite in zona central si est europeana (inclusiv
România)

UCS2

Conţine majoritatea caracterelor Unicode, codul fiecărui caracter
Lista completa
poate fi obtinuta cu comanda: SHOW CHARACTER
având 2 octeţi
SET
(CHARSET).Character set pentru Unicode, cu fiecare caracter ocupând intre
UTF8
InfoAcademy SQL 2015
Lista prezinta1sisi collation-ul
implicit si numarul maxim de octeti21
4 octeţi

Collation
Collation reprezinta setul de reguli specific utilizat la compararea
caracterelor componente.
- literele mici si mari pot fi considerate sau nu echivalente (case
sensitive/insensitive);
- literele cu accent sau diacritice pot fi sau nu echivalente;
- un character set poate avea unul sau mai multe collation, dar un sir de
caractere poate avea un singur collation;
- doua seturi diferite de caractere nu pot avea acelasi collation;
Denumirea fiecarui collation este de tipul: numecharset_referinta_tip.
Referinta poate fi: general, numele tarii pentru care se aplica, etc.
Tipul poate fi:
- _ci - case-insensitive;
- _cs - case sensitive;
- _bin - binary (comparate exclusive pe baza codului lor, toate fiind
diferite intre ele.
InfoAcademy SQL 2015
Se pot define valori implicite
de charset/collation la nivel de server, 22
BD si

Tipuri de date MySQL pentru siruri de caractere
Tip de date
CHAR(N)
VARCHAR(N)
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT

Numar maxim de
caractere
N (N<=255)
N (N<=65535)
255
65535
16,777,215 (16M)
4,294,967,295 (4G)

Caracteristici:
- similar ca la sirurile de octeti CHAR are lungime fixa completata
cu spatii;
- celelalte au lungime variabila plus octetii pentru lungime;
- un caracter poate ocupa mai multi octeti;
- la definirea unei coloane de tip sir de caractere se specifica
InfoAcademy SQL 2015
23
lungimea, charset-ul si collation;

Tipuri de date MySQL
1. Numerice (intregi, zecimale, vigula fixa, virgula mobila)
2. Temporale
3. Siruri (de octeti, de caractere)
4. Enumerate

InfoAcademy SQL 2015

24

Tipuri de date enumerate
Coloana de acest tip poate lua valori doar dintr-o multime fixa de valori
distincte. MySQL dispune de doua tipuri de astfel de date:
- ENUM
- contine valori dintr-o multime prestabilita, specificata in definitia
coloanei;
- fiecare inregistrare va avea una din valorile din lista, sau NULL, daca
este permis;
- pot fi definite maxim 65535 de valori distincte

CREATE TABLE Prezenta(
ID INT(10),
Perioada ENUM('dimineata', 'pranz', 'seara')
);
INSERT INTO Prezenta VALUES(3, 'pranz')
InfoAcademy SQL 2015

25

Tipuri de date enumerate (continuare)
Atunci cand coloana in cauza permite NULL, valoarea default a
coloanei va fi NULL. In caz contrar, daca nu se specifica explicit
valoarea default la crearea coloanei, in modul non-strict va fi folosit
implicit primul element din lista de valori permise.
 
Atunci cand pe o coloana de tip ENUM se introduce o valoare
invalida (alta decat cele din lista permisa) si serverul functioneaza
in modul non-strict, valoarea memorata in baza de date va fi ''
(sirul vid) pentru a indica eroarea. Aceastei valori particulare ii
corespunde codul 0

InfoAcademy SQL 2015

26

Tipuri de date enumerate (continuare)
- SET
- asemanator cu ENUM, in plus permite o combinatie de valori;
- pot fi definite maxim 64 de valori distincte;
- valoarea '' (sirul vid) este una valida in cazut acetui tip de date.

CREATE TABLE Prezenta(
ID INT(10),
Perioada SET('dimineata', 'pranz', 'seara')
);
INSERT INTO Prezenta VALUES(4, 'pranz,seara')

InfoAcademy SQL 2015

27

In instructiunile MySQL, valorile de tip ENUM sau SET sunt
reprezentate ca stringuri, incadrate intre apostroafe.
Stocarea lor in baza de date se face insa eficient: fiecare valoare
a unui tip de date enumerat este memorata de catre MySQL sub
forma unui intreg corespunzator.
Valorile sunt numerotate de la 1 (dimineata – 1, pranz – 2, seara
– 3).
Valoarea intreaga corespunzatoare conteaza atunci cand
coloanele de tip ENUM/SET intervin in expresii in contexte
numerice.
Exemplu:
InfoAcademy SQL 2015

28

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close