MySQL AUTO_INCREMENT med eksempler

Hva er automatisk økning?

Automatisk økning er en funksjon som opererer på numeriske datatyper. Den genererer automatisk sekvensielle numeriske verdier hver gang en post settes inn i en tabell for et felt definert som automatisk økning.

Når bruker du automatisk økning?

I leksjonen om databasenormalisering så vi på hvordan data kan lagres med minimal redundans, ved å lagre data i mange små tabeller relatert til hverandre ved hjelp av primær- og fremmednøkler.

MySQL AUTO_INCREMENT med eksempler

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

Syntaks for automatisk økning

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 kategori-id-feltet. Dette fører til at kategori-ID-en genereres automatisk hver gang en ny rad settes inn i tabellen. Det følger ikke med når du setter inn data i tabellen, MySQL genererer det.

Som standard er startverdien for AUTO_INCREMENT 1, og den vil øke med 1 for hver ny post

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

SELECT * FROM `categories`;

Utfører 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ører skriptet ovenfor mot myflixdb in 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 kategori-ID. MySQL genererte den automatisk for oss fordi kategori-ID-en er definert som automatisk økning.

Hvis du ønsker å få den siste innsettings-IDen som ble generert av MySQL, kan du bruke LAST_INSERT_ID-funksjonen for å gjøre det. Skriptet vist nedenfor får den siste IDen som ble generert.

SELECT LAST_INSERT_ID();

Utførelse av skriptet ovenfor gir det siste automatiske inkrementnummeret generert av INSERT-spørringen. Resultatene vises nedenfor.

MySQL AUTO_INCREMENT

Sammendrag

  • Auto increment-attributt når det er spesifisert i en kolonne med en numerisk datatype, genererer tall sekvensielt hver gang en ny rad legges til i databasen.
  • Automatisk inkrement brukes vanligvis til å generere primærnøkler.
  • Den definerte datatypen på den automatiske økningen bør være stor nok til å romme mange poster. Hvis du definerer TINYINT som datatypen for et felt for automatisk økning, begrenses antallet poster som kan legges til tabellen til 255, siden eventuelle verdier utover det ikke vil bli akseptert av TINYINT-datatypen.
  • Det anses som en god praksis å spesifisere den usignerte begrensningen på primærnøkler for automatisk økning for å unngå negative tall.
  • Når en rad slettes fra en tabell, blir ikke dens automatisk inkrementerte id gjenbrukt. MySQL fortsetter å generere nye tall sekvensielt.
  • Som standard er startverdien for AUTO_INCREMENT 1, og den vil øke med 1 for hver ny post
  • For å la AUTO_INCREMENT-sekvensen starte med en annen verdi , bruk AUTO_INCREMENT = 10

Oppsummer dette innlegget med: