Kullandığınız SQL mode, MySQL, AUTO_INCREMENT
sayısal sütunun değeri aralık dışında büyüdüğünde iki şeyden birini yapar. Her iki durumda da bir hata alırsınız, ancak farklı nedenlerle.
katı modda MySQL, aralık dışı değeri reddeder, geçersiz bir değer hatası verir ve INSERT
başarısız olur. Varsayılan sıkı olmayan modda MySQL değeri, veri türü için izin verilen en yüksek değere düşürür ve INSERT
gerçekleştirir. Ama AUTO_INCREMENT
nitelik zaten kullanılacak olası tüm değerleri neden oldu çünkü INSERT
başarısız olur ve (işaretsiz SMALLINT
örnek) bu hatayı alıyorum: Burada BIGINT
Örneğin
MySQL said:
#1062 - Duplicate entry '65535' for key 1
, "65535" ile değiştir Bu sorunun bir üretim veritabanında oluşma ihtimali olmamasına rağmen 18 quintillion.
Ama bir uygulamanın ömrü boyunca olası anahtar değerleri (INSERT
s sayısı) hafife eğer çok kolayca ortaya çıkabilir TINYINT
s ve SMALLINT
s ile
. Kodunuzda değişiklik yaptığınızı ve verilerinizin doğru bir şekilde yerleştirildiğini test ettiğinizi düşünün. Aniden uygulamanız yukarıdaki hatayla çalışmayı bırakıyor. Değişiklikleri bilinen iyi koda geri alırsınız, ancak hata gitmeyecek ... çok sinir bozucu.
Tamam. Uygulamamın bu kadar uzun süreceğini sanmıyorum => 500 yıl. – ashitaka
Benzer şekilde, yalnızca bir kez bir kez eklerseniz, uygulamanız 68 yıl boyunca 32 bit imzalanmış bir int ile çalışır. Her kayıt için 4 bayt kaydedin ve yapabiliyorsanız 32 bit int kullanın. – jmucchiello
Bunu ikincisiyim. Veri tabanı oluştururken daha fazla önlem gerektiren şeyler vardır. – Tomalak