今天来说一下我在做项目时踩到的postgresql数据库的坑.......
数据库:postgresql
工具:Navicat
诱因:设置数据库表的主键为自动增长
之前做项目时数据库是别人设计的,我只操作数据库表。今天在navicat工具中创建数据表时想让主键(id)自动增长,就将id的类型设置成int2,因为我见别人的表中自动增长的字段类型都是int2,
不料在插入数据时却提示主键为空(主键一般都是非空),如下所示:
我就纳闷了,为什么别人设置成int2可以自动增长,我就不行。于是经过一番百度说pg的自动增长类型为serial,于是我将之前的int2
修改为serial2,保存时却提示不存在这个类型,如下图所示:
注意:出现这个提示的时候,是不能保存的,所以不要期待虽然没有该类型,但保存的时候会自动转化成可自动增长的int2
于是我又设置成serial4,serial8都提示不存在此类型,于是我就火了,明明在下拉列表中是有这个类型的啊,为什么会有这样的提示?
气的我只想跳楼........(当然这是不可能的事情,哈哈~~)
我正襟危坐,平复了一下心情,决定重新建一张表,于是我在建新表的时候将id的类型选择成serial2,结果保存成功了,也没有该类型不存在的提示,但是我发现,保存之后的id类型却变成了
int2,这时再往表中插数据的时候就能插入成功,而且id也会自动增长.我虽然很高兴吧,但是也很感慨,原来我所看到的别人的int2并不是实际我所需要的int2,看来一切我们还是不能被表象所
迷惑啊,如果一味的参考别人的东西,甚至复制别人的东西而不懂得自己研究,深入内部,最后被坑的还是自己啊!!!!
好了,下面就将这次坑总结一下:
1、用navicat设置postgresql数据库中表字段自动增长时。字段类型应该在创建表的时候选择成serial2,但保存之后你会发现它变成你了int2
2、如果你在创建的时候选择了别的类型,创建之后想要修改成serial2就会报错,导致修改失败
3、自动增长的字段类型不能选择int2,虽然创建之后显示的是int2,但此int2非彼int2.
所以,pg中的int2有两种,一种是序列型的,可以自动增长;另一种是非序列型的,只能存整形数据,不能自动增长。