MySQL AUTO_INCREMENT cu Exemple
Ce este creศterea automatฤ?
Auto Increment este o funcศie care opereazฤ pe tipuri de date numerice. Acesta genereazฤ automat valori numerice secvenศiale de fiecare datฤ cรขnd o รฎnregistrare este inseratฤ รฎntr-un tabel pentru un cรขmp definit ca increment automat.
Cรขnd folosiศi creศterea automatฤ?
รn lecศia despre normalizarea bazelor de date, ne-am uitat la modul รฎn care datele pot fi stocate cu redundanศฤ minimฤ, prin stocarea datelor รฎn multe tabele mici, legate รฎntre ele folosind chei primare ศi strฤine.
O cheie primarฤ trebuie sฤ fie unicฤ, deoarece identificฤ unic un rรขnd dintr-o bazฤ de date. Dar, cum ne putem asigura cฤ cheia primarฤ este รฎntotdeauna unicฤ? Una dintre soluศiile posibile ar fi folosirea unei formule pentru a genera cheia primarฤ, care verificฤ existenศa cheii, รฎn tabel, รฎnainte de a adฤuga date. Acest lucru poate funcศiona bine, dar dupฤ cum puteศi vedea, abordarea este complexฤ ศi nu este sigurฤ. Pentru a evita o astfel de complexitate ศi pentru a ne asigura cฤ cheia primarฤ este รฎntotdeauna unicฤ, putem folosi MySQLFuncศia de incrementare automatฤ a lui pentru a genera chei primare. Incrementarea automatฤ este utilizatฤ cu tipul de date INT. Tipul de date INT acceptฤ atรขt valori semnate, cรขt ศi nesemnate. Tipurile de date nesemnate pot conศine numai numere pozitive. Ca cea mai bunฤ practicฤ, se recomandฤ definirea constrรขngerii nesemnate pe cheia primarฤ de incrementare automatฤ.
Sintaxa de incrementare automatฤ
Sฤ ne uitฤm acum la scriptul folosit pentru a crea tabelul categoriilor de filme.
CREATE TABLE `categories` ( `category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`) );
Observaศi โAUTO_INCREMENTโ รฎn cรขmpul categorie_id. Acest lucru face ca ID-ul categoriei sฤ fie generat automat de fiecare datฤ cรขnd un nou rรขnd este inserat รฎn tabel. Nu este furnizat la inserarea datelor รฎn tabel, MySQL รฎl genereazฤ.
รn mod implicit, valoarea de pornire pentru AUTO_INCREMENT este 1 ศi va creศte cu 1 pentru fiecare รฎnregistrare nouฤ
Sฤ examinฤm conศinutul curent al tabelului de categorii.
SELECT * FROM `categories`;
Executarea scriptului de mai sus รฎn MySQL Workbench รฎmpotriva myflixdb ne oferฤ urmฤtoarele rezultate.
| category_id | category_name | remarks |
|---|---|---|
| 1 | Comedy | Movies with humour |
| 2 | Romantic | Love stories |
| 3 | Epic | Story acient movies |
| 4 | Horror | NULL |
| 5 | Science Fiction | NULL |
| 6 | Thriller | NULL |
| 7 | Action | NULL |
| 8 | Romantic Comedy | NULL |
Sฤ inserฤm acum o nouฤ categorie รฎn tabelul de categorii.
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
Executarea scriptului de mai sus รฎmpotriva myflixdb รฎn MySQL banc de lucru ne oferฤ urmฤtoarele rezultate prezentate mai jos.
| category_id | category_name | remarks |
|---|---|---|
| 1 | Comedy | Movies with humour |
| 2 | Romantic | Love stories |
| 3 | Epic | Story acient movies |
| 4 | Horror | NULL |
| 5 | Science Fiction | NULL |
| 6 | Thriller | NULL |
| 7 | Action | NULL |
| 8 | Romantic Comedy | NULL |
| 9 | Cartoons | NULL |
Reศineศi cฤ nu am furnizat ID-ul categoriei. MySQL l-a generat automat pentru noi, deoarece id-ul categoriei este definit ca increment automat.
Dacฤ doriศi sฤ obศineศi ultimul ID de inserare care a fost generat de MySQL, puteศi utiliza funcศia LAST_INSERT_ID pentru a face asta. Scriptul prezentat mai jos primeศte ultimul id care a fost generat.
SELECT LAST_INSERT_ID();
Executarea scriptului de mai sus oferฤ ultimul numฤr de increment automat generat de interogarea INSERT. Rezultatele sunt prezentate mai jos.
Rezumat
- Atributul de increment automat atunci cรขnd este specificat pe o coloanฤ cu tipuri de date numerice, genereazฤ numere secvenลฃial ori de cรขte ori este adฤugat un nou rรขnd รฎn baza de date.
- Incrementarea automatฤ este folositฤ รฎn mod obiศnuit pentru a genera chei primare.
- Tipul de date definit pe incrementul automat ar trebui sฤ fie suficient de mare pentru a gฤzdui multe รฎnregistrฤri. Definirea TINYINT ca tip de date pentru un cรขmp de incrementare automatฤ limiteazฤ numฤrul de รฎnregistrฤri care pot fi adฤugate la tabel doar la 255, deoarece orice valoare dincolo de aceasta nu ar fi acceptatฤ de tipul de date TINYINT.
- Este consideratฤ o practicฤ bunฤ sฤ specificaศi constrรขngerea nesemnatฤ asupra cheilor primare de incrementare automatฤ pentru a evita sฤ aveศi numere negative.
- Cรขnd un rรขnd este ศters dintr-un tabel, id-ul sฤu incrementat automat nu este reutilizat. MySQL continuฤ sฤ genereze noi numere secvenลฃial.
- รn mod implicit, valoarea de pornire pentru AUTO_INCREMENT este 1 ศi va creศte cu 1 pentru fiecare รฎnregistrare nouฤ
- Pentru a lฤsa secvenศa AUTO_INCREMENT sฤ รฎnceapฤ cu o altฤ valoare, utilizaศi AUTO_INCREMENT = 10

