假设有数据库表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`
地势坤,君子以厚德载物。