MySQL AUTO_INCREMENT med exempel
Vad är automatisk ökning?
Automatisk ökning är en funktion som fungerar på numeriska datatyper. Den genererar automatiskt sekventiella numeriska värden varje gång en post infogas i en tabell för ett fält som definieras som automatisk inkrement.
När använder du automatisk ökning?
I lektionen om databasnormalisering tittade vi på hur data kan lagras med minimal redundans, genom att lagra data i många små tabeller relaterade till varandra med hjälp av primära och främmande nycklar.
En primärnyckel måste vara unik eftersom den unikt identifierar en rad i en databas. Men hur kan vi säkerställa att den primära nyckeln alltid är unik? En av de möjliga lösningarna skulle vara att använda en formel för att generera primärnyckeln, som kontrollerar om det finns nyckeln, i tabellen, innan data läggs till. Detta kan fungera bra men som du kan se är tillvägagångssättet komplext och inte idiotsäkert. För att undvika sådan komplexitet och för att säkerställa att primärnyckeln alltid är unik kan vi använda MySQLs funktion för automatisk ökning för att generera primärnycklar. Automatisk ökning används med datatypen INT. INT-datatypen stöder både signerade och osignerade värden. Osignerade datatyper kan bara innehålla positiva tal. Som en bästa praxis rekommenderas det att definiera den osignerade begränsningen på primärnyckeln för automatisk ökning.
Syntax för automatisk ökning
Låt oss nu titta på skriptet som används för att skapa tabellen över filmkategorier.
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ägg märke till "AUTO_INCREMENT" i fältet category_id. Detta gör att kategori-ID genereras automatiskt varje gång en ny rad infogas i tabellen. Det medföljer inte när data infogas i tabellen, MySQL genererar det.
Som standard är startvärdet för AUTO_INCREMENT 1, och det kommer att öka med 1 för varje ny post
Låt oss undersöka det aktuella innehållet i kategoritabellen.
SELECT * FROM `categories`;
Exekvera skriptet ovan i MySQL arbetsbänk mot myflixdb ger oss följande resultat.
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 |
Låt oss nu infoga en ny kategori i kategoritabellen .
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
Exekvera skriptet ovan mot myflixdb in MySQL arbetsbänk ger oss följande resultat som visas nedan.
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 |
Observera att vi inte angav kategori-id. MySQL genererade det automatiskt åt oss eftersom kategori-id är definierat som automatisk ökning.
Om du vill få det senaste infognings-id:t som genererades av MySQL, du kan använda funktionen LAST_INSERT_ID för att göra det. Skriptet som visas nedan får det senaste id som genererades.
SELECT LAST_INSERT_ID();
Genom att köra skriptet ovan får du det senaste automatiska inkrementnumret som genereras av INSERT-frågan. Resultaten visas nedan.
Sammanfattning
- Attribut för automatisk ökning när det anges i en kolumn med en numerisk datatyp, genererar siffror sekventiellt när en ny rad läggs till i databasen.
- Den automatiska ökningen används vanligtvis för att generera primärnycklar.
- Den definierade datatypen på det automatiska inkrementet bör vara tillräckligt stor för att rymma många poster. Att definiera TINYINT som datatyp för ett automatiskt inkrementfält begränsar antalet poster som kan läggas till i tabellen till endast 255 eftersom alla värden utöver det inte skulle accepteras av TINYINT-datatypen.
- Det anses vara en god praxis att specificera den osignerade begränsningen för automatisk ökning av primärnycklar för att undvika negativa tal.
- När en rad raderas från en tabell återanvänds inte dess automatiskt inkrementerade id. MySQL fortsätter att generera nya nummer sekventiellt.
- Som standard är startvärdet för AUTO_INCREMENT 1, och det kommer att öka med 1 för varje ny post
- För att låta AUTO_INCREMENT-sekvensen börja med ett annat värde , använd AUTO_INCREMENT = 10