zoukankan      html  css  js  c++  java
  • 项目中的那些事---踩过的数据库坑

    今天来说一下我在做项目时踩到的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!
  • 相关阅读:
    一些常用的正则表达式
    ASP.net国际化页面可以选择输出语言
    SQL 2008 数据表导入到 ORACLE 10g
    转载 SQL Server 2008中增强的汇总技巧
    类似于行转列的一种需求
    第一次
    很奇怪的一个SQL 语句
    MS SQL 中 FULL JOIN 的用法
    [转载]网络编辑必知常识:什么是PV、UV和PR值 zz
    寒假学习2实验一Linux系统的安装和常用命令
  • 原文地址:https://www.cnblogs.com/hellowhy/p/5982052.html
Copyright © 2011-2022 走看看