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