假設有數據庫表student,表中有字段studentCode,它是字符型的,現有需求:“每次向student表插入數據時,自動生成studentCode字段的值”
如果你的實現思路是這樣的:
if(student表為空){ 待插入數據studentCode字段的值設置為1; }else{ 查詢出表中studentCode字段的最大值max; 待插入數據studentCode字段的值設置為max+1; } 將數據插入student表;
你可能使用以下SQL語句查詢studentCode字段的最大值:
SELECT MAX(studentCode) FROM `student`
測試一下程序,試着插入幾條數據:
1 插入第1條數據:studentCode == 1 2 插入第2條數據:studentCode == 2 3 插入第3條數據:studentCode == 3 4 插入第4條數據:studentCode == 4 5 插入第5條數據:studentCode == 5 6 插入第6條數據:studentCode == 6 7 插入第7條數據:studentCode == 7 8 插入第8條數據:studentCode == 8 9 插入第9條數據:studentCode == 9 10 插入第10條數據:studentCode == 10 11 插入第11條數據:studentCode == 10 12 插入第12條數據:studentCode == 10 13 插入第13條數據:studentCode == 10
最開始插入前10條數據studentCode字段的值還是正常的,可是從第11條數據開始,為什么studentCode字段的值全不變了呢?
原因就是studentCode字段是字符型的,從指定第11條數據的插入操作開始,SELECT MAX(studentCode) FROM `student` 的結果將永遠是9,所以就導致了最終設置的studentCode的值永遠是10.
解決辦法:類型轉換
1 SELECT MAX(CONVERT(studentCode,INT)) FROM `student`