MySQL AUTO_INCREMENT cu exemple

Anonim

Ce este incrementarea automată?

Incrementarea automată este o funcție care operează pe tipuri de date numerice. 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 utilizați incrementarea automată?

În lecția despre normalizarea bazei 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 externe.

O cheie primară trebuie să fie unică, deoarece identifică în mod 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, utilizarea 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 infailibilă. Pentru a evita o astfel de complexitate și pentru a ne asigura că cheia primară este întotdeauna unică, putem utiliza caracteristica de creștere automată a MySQL 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 doar numere pozitive. Ca o bună practică, se recomandă definirea constrângerii nesemnate pe cheia primară de incrementare automată.

Sintaxa de incrementare automată

Să vedem acum 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 category_id. Acest lucru face ca ID-ul categoriei să fie generat automat de fiecare dată când se introduce un nou rând în tabel. Nu este furnizat la introducerea datelor în tabel, MySQL le generează.

În mod implicit, valoarea inițială pentru AUTO_INCREMENT este 1 și va crește cu 1 pentru fiecare înregistrare nouă

Să examinăm conținutul curent al tabelului 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ă introducem acum o nouă categorie în tabelul categoriilor.

INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');

Executarea scriptului de mai sus împotriva myflixdb în MySQL workbench 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 acest lucru. Scriptul prezentat mai jos primește ultimul id generat.

SELECT LAST_INSERT_ID();

Executarea scriptului de mai sus dă ultimul număr de creștere automată generat de interogarea INSERT. Rezultatele sunt prezentate mai jos.

rezumat

  • Atributul de creștere automată atunci când este specificat pe o coloană cu tipuri de date numerice, generează numere secvențial ori de câte ori se adaugă un nou rând în baza de date.
  • Incrementul automat este utilizat în mod obișnuit pentru a genera chei primare.
  • Tipul de date definit pentru creșterea 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 creștere automată limitează numărul de înregistrări care pot fi adăugate la tabel la 255 numai deoarece orice valori dincolo de acestea nu ar fi acceptate de tipul de date TINYINT.
  • Se consideră o practică bună să specificați constrângerea nesemnată pe cheile primare de incrementare automată pentru a evita numerele negative.
  • Când un rând este șters dintr-un tabel, ID-ul său incrementat automat nu este refolosit. MySQL continuă să genereze noi numere secvențial.
  • În mod implicit, valoarea inițială pentru AUTO_INCREMENT este 1 și va crește cu 1 pentru fiecare înregistrare nouă
  • Pentru a permite secvenței AUTO_INCREMENT să înceapă cu o altă valoare, utilizați AUTO_INCREMENT = 10