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