MySQL AUTO_INCREMENT med eksempler

Hvad er automatisk stigning?

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

Hvornår bruger du automatisk stigning?

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

MySQL AUTO_INCREMENT med eksempler

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, som kontrollerer for eksistensen af ​​nøglen i tabellen, før der tilføjes data. Dette kan fungere 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 MySQL's automatiske inkrementfunktion til at generere primærnøgler. Automatisk stigning 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å primærnøglen til automatisk stigning.

Automatisk stigningssyntaks

Lad os nu se på scriptet, der blev brugt til at lave 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`)
);

Læg mærke til "AUTO_INCREMENT" i feltet category_id. Dette bevirker, at kategori-id'et 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.

Som standard er startværdien for AUTO_INCREMENT 1, og den vil stige med 1 for hver ny post

Lad os undersøge det aktuelle indhold af kategoritabellen.

SELECT * FROM `categories`;

Udførelse af ovenstående script i MySQL workbench 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 in MySQL arbejdsbord 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 har leveret kategori-id'et. MySQL genererede det automatisk for os, fordi kategori-id'et er defineret som automatisk stigning.

Hvis du ønsker at få det sidste indsæt-id, der blev genereret af MySQL, kan du bruge funktionen LAST_INSERT_ID til at gøre det. Scriptet vist nedenfor får det sidste id, der blev genereret.

SELECT LAST_INSERT_ID();

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

MySQL AUTO_INCREMENT

Resumé

  • Auto increment-attribut, når den er angivet i en kolonne med en numerisk datatype, genererer tal sekventielt, når en ny række tilføjes i databasen.
  • Den automatiske stigning bruges almindeligvis til at generere primærnøgler.
  • Den definerede datatype på den automatiske stigning skal være stor nok til at rumme mange poster. Definition af TINYINT som datatypen for et felt med automatisk stigning begrænser antallet af poster, der kan tilføjes til tabellen, til kun 255, da eventuelle værdier ud over det ikke ville blive accepteret af TINYINT-datatypen.
  • Det anses for at være en god praksis at angive den usignerede begrænsning på primære nøgler med automatisk stigning for at undgå negative tal.
  • Når en række slettes fra en tabel, genbruges dens automatiske id ikke. MySQL fortsætter med at generere nye numre sekventielt.
  • Som standard er startværdien for AUTO_INCREMENT 1, og den vil stige med 1 for hver ny post
  • For at lade AUTO_INCREMENT-sekvensen starte med en anden værdi, brug AUTO_INCREMENT = 10