• 项目中的那些事---踩过的数据库坑


    今天来说一下我在做项目时踩到的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有两种,一种是序列型的,可以自动增长;另一种是非序列型的,只能存整形数据,不能自动增长。

    最美好的时光里,不要一直是一个lowser!
  • 相关阅读:
    [leetcode]259. 3Sum Smaller 三数之和小于目标值
    题型总结之K Sum
    [Leetcode]167. Two Sum II
    题型总结之Sliding Window
    [Leetcode]703. Kth Largest Element in a Stream 数据流中的第 K 大元素
    [Leetcode]307. Range Sum Query
    pycharm同一目录下无法import明明已经存在的.py文件
    python高级特性:迭代器与生成器
    self的含义,为什么类调用方法时需要传参数?
    git三:远程仓库GitHub
  • 原文地址:https://www.cnblogs.com/hellowhy/p/5982052.html
Copyright © 2020-2023  润新知