實際上本次故障的素材來自於朋友的朋友,雖然我並不是故障的親身經歷者,但即便只是作為旁觀者,依然感覺有所收獲,於是乎記錄下來以饋讀者。
故障的來龍去脈大致是這樣的:在一個月黑風高的晚上,苦逼的程序員被一陣急促的報警短信聲驚醒,原來是數據庫的某個表出問題了,雖然查詢操作都正常,但創建操作卻都失敗了,經過調試,發現原因是表被插入了一行問題數據,其自增字段的值被顯式的設置為整型的最大值,導致後續缺省插入的數據不能獲取到一個合法的主鍵值。
我們不妨創建一個測試表說明問題:
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
然後插入一行問題數據:
INSERT INTO test (id, name) VALUES (2147483647, 'x');
結果導致不能執行正常的插入語句:
INSERT INTO test (name) VALUES ('y');
此時數據庫會報錯:
#1062