Limieten en beperkingen
Uit Yapf
Sequences en auto_inrement
De limieten van sequences hangen af van het merk database. PostgreSQL gebruikt standaard een INT4, mar via BIGSERIAL kan hij ook een INT8 aan.
MySQL heeft niet echt een limiet op auto_increment, waardoor de fijne Duplicate value 127 for key 1 wordt veroorzaakt.
Wat moet ik doen als ik de limiet van een auto_increment of sequence bereik?
Uitbundig feestvieren, want dan ben je heel erg oud geworden!
Gewoonlijk gebruik je voor auto_increment of sequence een INTEGER van vier bytes, dat is dus 256^4 = 4.3 miljard mogelijke waarden. Zelfs als je 24/7 elke seconde 136 records invoert dan duurt het nog een jaar voordat je aan de 4.3Mld zit.
Het aantal toepassingen dat zoiets zou doen kun je op één hand tellen. In de praktijk zul je, zeker met websites, niet meer dan 10 tot 20 records per seconden invoeren en dan nog alleen in de piekuren op zeer drukke websites.
Oftewel, die limiet bereik je niet zo makkelijk.
In PostgreSQL kan het nog gekker. Hier kun je een 8-bytes integer gebruiken voor de sequence, dat betekent 256^8=18446744073 Miljard(!) waardes. Er is geen realistisch aantal records dat je per seconde zou kunnen invoeren om dat binnen jouw leven nog vol te krijgen.
Noot: Voor MySQL gebruikers, als je TINYINT gebruikt heb je de limiet morgen al bereikt, want TINYINT gaat maar tot 127. Probeer nooit te beknibbelen op de afmeting van je database door kleinere datatypes te kiezen. Je weet van tevoren nooit hoeveel records je gaat krijgen en als je het wel weet dan heb je meestal het verkeerde getal in gedachten. Bedenk ook dat 127 niet het maximum aantal records in de tabel is, maar het maximum aantal keer dat je een record kunt inserten, ook als je het direct erna weer wist. Neem altijd tenminste UNSIGNED INTEGER voor auto_increment, en niets minder dan dat. (UNSIGNED omdat de standaard integers 'SIGNED' zijn, wat betekent dat de helft van het bereik van de integer wordt gebruikt voor negatieve getallen en die gebruik je toch niet)