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.

MySQL AUTO_INCREMENT cu Exemple

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.

MySQL INCREMENT AUTO

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

Rezumaศ›i aceastฤƒ postare cu: