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.
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.
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

