MySQL AUTO_INCREMENT med eksempler

Anonim

Hva er automatisk økning?

Auto Increment er en funksjon som fungerer på numeriske datatyper. Den genererer automatisk sekvensielle numeriske verdier hver gang en post settes inn i en tabell for et felt definert som automatisk inkrement.

Når bruker du automatisk økning?

I leksjonen om databasens normalisering så vi på hvordan data kan lagres med minimal redundans, ved å lagre data i mange små tabeller, relatert til hverandre ved hjelp av primære og utenlandske nøkler.

En primærnøkkel må være unik da den identifiserer en rad i en database unikt. Men hvordan kan vi sikre at hovednøkkelen alltid er unik? En av de mulige løsningene ville være å bruke en formel til å generere primærnøkkelen, som sjekker for eksistensen av nøkkelen, i tabellen før du legger til data. Dette kan fungere bra, men som du ser er tilnærmingen kompleks og ikke idiotsikker. For å unngå slik kompleksitet og for å sikre at primærnøkkelen alltid er unik, kan vi bruke MySQLs Auto increment-funksjon til å generere primærnøkler. Automatisk økning brukes med INT-datatypen. INT-datatypen støtter både signerte og usignerte verdier. Usignerte datatyper kan bare inneholde positive tall. Som en god praksis anbefales det å definere den usignerte begrensningen for den primære nøkkelen for automatisk økning.

Automatisk økning av syntaksen

La oss nå se på manuset som ble brukt til å lage 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`));

Legg merke til "AUTO_INCREMENT" i kategorien_id-feltet. Dette fører til at kategori-ID genereres automatisk hver gang en ny rad settes inn i tabellen. Det leveres ikke når du setter inn data i tabellen, MySQL genererer det.

Startverdien for AUTO_INCREMENT er som standard 1, og den øker med 1 for hver nye post

La oss undersøke det nåværende innholdet i kategoritabellen.

SELECT * FROM `categories`;

Å utføre skriptet ovenfor i MySQL arbeidsbenk mot myflixdb gir oss 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

La oss nå sette inn en ny kategori i kategoritabellen.

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

Å utføre ovennevnte skript mot myflixdb i MySQL arbeidsbenk gir oss 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

Merk at vi ikke oppga kategorien ID. MySQL genererte den automatisk for oss fordi kategori-ID er definert som automatisk økning.

Hvis du vil hente den siste ID-en som ble generert av MySQL, kan du bruke funksjonen LAST_INSERT_ID til å gjøre det. Skriptet vist nedenfor får den siste ID-en som ble generert.

SELECT LAST_INSERT_ID();

Å utføre skriptet ovenfor gir det siste automatiske trinnet som genereres av INSERT-spørringen. Resultatene er vist nedenfor.

Sammendrag

  • Automatisk inkrementattributt når det er spesifisert i en kolonne med numeriske datatyper, genererer tall sekvensielt når en ny rad legges til i databasen.
  • Automatisk inkrement brukes ofte til å generere primærnøkler.
  • Den definerte datatypen i automatisk økning bør være stor nok til å imøtekomme mange poster. Å definere TINYINT som datatype for et automatisk økningsfelt begrenser antall poster som kan legges til tabellen til 255 bare siden eventuelle verdier utover dette ikke vil bli akseptert av TINYINT-datatypen.
  • Det anses som en god praksis å spesifisere usignert begrensning for automatisk økning av primærnøkler for å unngå å ha negative tall.
  • Når en rad slettes fra en tabell, blir ikke den automatisk økte ID-en brukt på nytt. MySQL fortsetter å generere nye tall sekvensielt.
  • Startverdien for AUTO_INCREMENT er som standard 1, og den øker med 1 for hver nye post
  • For å la AUTO_INCREMENT-sekvensen starte med en annen verdi, bruk AUTO_INCREMENT = 10