MySQL AUTO_INCREMENT med eksempler

Anonim

Hvad er automatisk stigning?

Auto Increment er en funktion, der fungerer på numeriske datatyper. Det genererer automatisk sekventielle numeriske værdier hver gang en post indsættes i en tabel for et felt defineret som automatisk inkrement.

Hvornår bruger du automatisk stigning?

I lektionen om databasens normalisering så vi på, hvordan data kan lagres med minimal redundans ved at gemme data i mange små tabeller, der er relateret til hinanden ved hjælp af primære og udenlandske nøgler.

En primær nøgle skal være unik, da den entydigt identificerer en række i en database. Men hvordan kan vi sikre, at den primære nøgle altid er unik? En af de mulige løsninger ville være at bruge en formel til at generere den primære nøgle, der kontrollerer for eksistensen af ​​nøglen, i tabellen, før der tilføjes data. Dette fungerer muligvis godt, men som du kan se, er tilgangen kompleks og ikke idiotsikker. For at undgå en sådan kompleksitet og for at sikre, at den primære nøgle altid er unik, kan vi bruge MySQLs Auto Increment-funktion til at generere primære nøgler. Automatisk forøgelse bruges med INT-datatypen. INT-datatypen understøtter både signerede og usignerede værdier. Usignerede datatyper kan kun indeholde positive tal. Som en bedste praksis anbefales det at definere den usignerede begrænsning på den primære nøgle til automatisk stigning.

Automatisk forøgelse af syntaks

Lad os nu se på det manuskript, der blev brugt til at oprette filmkategoritabellen.

CREATE TABLE `categories` (`category_id` int(11) AUTO_INCREMENT,`category_name` varchar(150) DEFAULT NULL,`remarks` varchar(500) DEFAULT NULL,PRIMARY KEY (`category_id`));

Bemærk "AUTO_INCREMENT" i feltet category_id. Dette medfører, at kategori-id automatisk genereres, hver gang en ny række indsættes i tabellen. Det leveres ikke, når der indsættes data i tabellen, MySQL genererer det.

Startværdien for AUTO_INCREMENT er som standard 1, og den øges med 1 for hver nye post

Lad os undersøge det aktuelle indhold i kategoritabellen.

SELECT * FROM `categories`;

At udføre ovenstående script i MySQL-arbejdsbænk mod myflixdb giver os følgende resultater.

 
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

Lad os nu indsætte en ny kategori i kategoritabellen.

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

Udførelse af ovenstående script mod myflixdb i MySQL-arbejdsbænken giver os følgende resultater vist nedenfor.

 
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

Bemærk, at vi ikke leverede kategori-id'et. MySQL genererede det automatisk for os, fordi kategori-id'et er defineret som automatisk inkrement.

Hvis du vil hente det sidste insert-id, der blev genereret af MySQL, kan du bruge funktionen LAST_INSERT_ID til at gøre det. Nedenstående script får det sidste id, der blev genereret.

SELECT LAST_INSERT_ID();

Udførelse af ovenstående script giver det sidste automatiske forøgelsesnummer genereret af INSERT-forespørgslen. Resultaterne er vist nedenfor.

Resumé

  • Automatisk inkrementattribut, når den er specificeret i en kolonne med numeriske datatyper, genererer tal sekventielt, hver gang en ny række føjes til databasen.
  • Automatisk inkrement bruges ofte til at generere primære nøgler.
  • Den definerede datatype på den automatiske stigning skal være stor nok til at rumme mange poster. Definition af TINYINT som datatype for et automatisk stigningsfelt begrænser antallet af poster, der kan føjes til tabellen til kun 255, da værdier ud over dette ikke ville blive accepteret af TINYINT-datatypen.
  • Det betragtes som en god praksis at specificere den usignerede begrænsning for primære nøgler til automatisk stigning for at undgå at have negative tal.
  • Når en række slettes fra en tabel, bruges dens automatisk inkrementerede id ikke igen. MySQL fortsætter med at generere nye numre sekventielt.
  • Startværdien for AUTO_INCREMENT er som standard 1, og den øges med 1 for hver nye post
  • Hvis du vil lade AUTO_INCREMENT-sekvensen starte med en anden værdi, skal du bruge AUTO_INCREMENT = 10