sql - cap 4 new

28
Cap 4. Tipuri de date MySQL

Upload: nastase-lorena

Post on 05-Dec-2015

289 views

Category:

Documents


1 download

DESCRIPTION

SQL - Cap 4 New

TRANSCRIPT

Cap 4.

Tipuri de date MySQL

InfoAcademy SQL 2015 2

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;

Author

InfoAcademy SQL 2015 3

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 4

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 se dubleaza).

InfoAcademy SQL 2015 5

Numere intregi

Tipuri de date si modificatori specifici

Tip de date SinonimeNr. Octeţi Valori posibile, cu semn

Valori posibile, fara semn (unsigned)

TINYINT - 1 -128...127 0...255

SMALLINT

2 -32768...32767 0...65535

MEDIUMINT - 3 -8388608...8388607 0...16777215

INT INTEGER 4 -2147483648...2147483647 0... 4294967295

BIGINT - 8 (aprox) -9xl018...9xl018 0...18xl018

InfoAcademy SQL 2015 6

„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 7

„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 8

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 9

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;- In virgula fixa memoram valoarea exacta asteptata (finita sau rotunjita);- In virgula mobila memoram valori aproximative dar avem viteza de calcul sporita;

InfoAcademy SQL 2015 10

Tipuri de date MySQL pentru numere in virgula fixa

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;

CREATE TABLE Produse (Denumire VARCHAR(100), Pret DECIMAL(5,2))

Tip de date Sinonime Nr. oct. (precizie)

Valori posibile

DECIMAL DECNUMERIC FIXED

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

InfoAcademy SQL 2015 11

Tipuri de date MySQL pentru numere in virgula mobila

REAL este implicit sinonim pentru DOUBLE; daca insa se foloseşte in sql_mode opţiunea REAL_AS_FLOAT, REAL devine sinonim pentru FLOAT

CREATE TABLE Persoane (Nume VARCHAR(100), Greutate FLOAT(5,2))

Exemplu:

Tip de date Sinonime Nr. oct.

(precizie)

Valori posibile cu semn

Valori posibile . unsigned

FLOAT - 4 -3.4xl038...3.4 xl038 0...3.4 x IO38

DOUBLE DOUBLE PRECISION REAL (vezi nota)

8 -1.7 x IO308...1.7 x IO308

(aprox)0...1.7xl0308

(aprox.)

InfoAcademy SQL 2015 12

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 13

Tipuri de date temporale

Caracteristici:- data calendaristica - tipul de date DATE sub forma AAAA-LL-ZZ;- 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.

Tip de date Valori posibileDATE 1000-01-01 ... 9999-12-31DATETIME 1000-01-01 00:00:00 ... 9999-12-31 23:59:59TIME -838:59:59 ... 838:59:59YEAR 1901 ... 2155 (pt 4 digiti) 1970 ... 2069 (pt 2 digiti)TIMESTAMP 1970-01-01 00:00:01 ... 2038-01-09 03:14:07

InfoAcademy SQL 2015 14

Tipuri de date temporale (continuare)

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 „zero" a acelui tip de date introdusa automat in modul non-strict. Opţiunea NO_ZERO_DATE – strict.

Tip de date Valori posibileDATE 1000-01-01 ... 9999-12-31DATETIME 1000-01-01 00:00:00 ... 9999-12-31 23:59:59TIME -838:59:59 ... 838:59:59YEAR 1901 ... 2155 (pt 4 digiti) 1970 ... 2069 (pt 2 digiti)TIMESTAMP 1970-01-01 00:00:01 ... 2038-01-09 03:14:07

InfoAcademy SQL 2015 15

Tipuri de date temporale (continuare)

INSERT INTO Date(D DATE, TS TIMESTAMP, T TIME, Y YEAR)

VALUES('2009-04-05', '2006-4-13 18:23:45', '104:56:59', 1986);

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;- Poate avea ca modificator ON UPDATE CURRENT_TIMESTAMP (doar pe o col);- Default CURRENT_TIMESTAMP si ON UPDATE CURRENT_TIMESTAMP – sepot

atribui aceeasi coloane. Daca nu sunt specificate sunt implicite pe prima col TS;

InfoAcademy SQL 2015 16

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 17

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 asociate doua proprietăţi care nu se regăsesc la şirurile de octeţi: character set si collation. Prima stabileşte setul de caractere ce pot fi folosite in cadrul şirului, iar cea de-a doua modalitatea de comparare a caracterelor din acel set.

InfoAcademy SQL 2015 18

Siruri de octeti

BYNARY – caracteristici:- siruri de lungime fixa (N), specificata in definitia coloanei;- valorile cu 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.

Tip de date Spaţiu ocupat Nr. maxim de octeţiBINARY(N) N octeţi N (N<=255)VARBINARY(N) Nr. de octeţi al valorii + 1 sau 2 pt lungime N (N<=65535)TINYBLOB Nr. de octeţi al valorii + 1 octet pt lungime 255BLOB Nr. de octeţi al valorii + 2 octet pt lungime 65535MEDIUMBLOB Nr. de octeţi al valorii + 3 octet pt lungime 16,777,215 (16M)LONGBLOB Nr. de octeţi al valorii + 4 octet pt lungime 4,294,967,295 (4G)

InfoAcademy SQL 2015 19

Siruri de octeti (continuare)

VARBYNARY – caracteristici:- lungime maxima (N), specificata in definitia coloanei;- 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 (spatiile de la final vor fi pastrate).

Tip de date Spaţiu ocupat Nr. maxim de octeţiBINARY(N) N octeţi N (N<=255)VARBINARY(N) Nr. de octeţi al valorii + 1 sau 2 pt lungime N (N<=65535)TINYBLOB Nr. de octeţi al valorii + 1 octet pt lungime 255BLOB Nr. de octeţi al valorii + 2 octet pt lungime 65535MEDIUMBLOB Nr. de octeţi al valorii + 3 octet pt lungime 16,777,215 (16M)LONGBLOB Nr. de octeţi al valorii + 4 octet pt lungime 4,294,967,295 (4G)

InfoAcademy SQL 2015 20

Siruri de octeti (continuare)

Tipurile de date BLOB (Binary Large Object)– caracteristici:- accepta valori cu lungime variabila, asemanatoare cu VARBINARY, dar cu

valori posibile mult mai mari;- fiecare valoare va ocupa numarul de octeti corespunzator plus 1-4 octeti pentru mentionarea lungimii.

Tip de date Spaţiu ocupat Nr. maxim de octeţiBINARY(N) N octeţi N (N<=255)VARBINARY(N) Nr. de octeţi al valorii + 1 sau 2 pt lungime N (N<=65535)TINYBLOB Nr. de octeţi al valorii + 1 octet pt lungime 255BLOB Nr. de octeţi al valorii + 2 octet pt lungime 65535MEDIUMBLOB Nr. de octeţi al valorii + 3 octet pt lungime 16,777,215 (16M)LONGBLOB Nr. de octeţi al valorii + 4 octet pt lungime 4,294,967,295 (4G)

InfoAcademy SQL 2015 21

Ş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).

Lista completa poate fi obtinuta cu comanda: SHOW CHARACTER SET (CHARSET).Lista prezinta si collation-ul implicit si numarul maxim de octeti ocupat.

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 având 2 octeţi

UTF8 Character set pentru Unicode, cu fiecare caracter ocupând intre 1 si 4 octeţi

InfoAcademy SQL 2015 22

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.Se pot define valori implicite de charset/collation la nivel de server, BD si tabela.

InfoAcademy SQL 2015 23

Tipuri de date MySQL pentru siruri de caractere

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 lungimea, charset-ul si collation;

Tip de date Numar maxim de caractereCHAR(N) N (N<=255)VARCHAR(N) N (N<=65535)TINYTEXT 255TEXT 65535MEDIUMTEXT 16,777,215 (16M)LONGTEXT 4,294,967,295 (4G)

InfoAcademy SQL 2015 24

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 25

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 26

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 27

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 28

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: