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

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

时间: 2024-10-10 19:35:38

项目中的那些事---踩过的数据库坑的相关文章

项目中客户端,服务端验证,数据库联合唯一约束,事务管理。

项目中有个需求,发布一个活动,记录下参加该活动的id和参与人id,同时调用接口,往收藏夹中添加一条记录,往交易表中添加一条记录.最后根据返回的结果,给出不同的提示信息. 1.如果当前的在jsp页面上面做处理,判断是否参与过.参加过之后,参加按钮不可点.没有参加的情况,参加按钮可以点. 2.jsp客户端加上js处理,参加按钮点击完之后,按钮不可点. 3.在controller中,业务逻辑开始前,再次java判断是否参加过该活动. 4.在数据库中参与表(活动id,参与人id)加上联合唯一约束.根据异

项目中的那些事---Java反射的应用

最近工作中遇到一个这样的问题: 为某个项目中的所有接口做一个测试工具,使用java Swing技术,该项目有不同的版本,不是所有版本中的接口都是相同的,而我做的工具需要兼容所有版本. 于是就引入了这样一个问题: 有些接口如果在部分版本中不存在,那么通过界面执行这个操作的时候就会报错,所以为了兼容所有版本,就要在方法调用之前考虑方法是否存在,同时为了不在编译时抛异常,在调用方法时 也需要通过反射来调用,具体实现如下: 一.使用反射判断方法是否存在 1 /** 2 * 判断方法是否存在 3 * 4

maven web项目中整合ssm框架(连接Mysql数据库)

前面说完怎么样创建maven web项目,这篇继续向web项目中整合进ssm(spring+springmvc+mybatis)的框架. 先发个目录图片,让萌新们知道下面提到的文件是创建在什么地方. 1.web.xml文件 修改如下: <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/

项目中的那些事---PHP函数

总结工作中遇到的php函数: 1.查找:strpos("str", "substr"): 查找substr字符串在str字符串中出现的位置 第一个参数是:被查找的字符串 第二个参数是:要查找的字符串 1 $str = "my name is php"; 2 var_dump(strpos($str,"is")); 3 4 运行结果为: 5 int(8) 2.把字符串打散为字符:explode(' ','str'); 第一个参数

项目中的那些事---时间戳(一)

一.时间戳 简单讲,unix时间戳就是从1970-01-01开始所经过的秒数,什么时候获取时间戳,就是到那个时间点所经历的秒数. 二.JavaScript获取时间戳 根据时间戳的定义,可以使用javascript中的几个方法来获取系统当前的时间戳: 1.getTime() w3c school的解释如下: 根据上面的定义,我们可以获取系统当前的时间戳: var timeStamp1 = new Date().getTime(); console.info(timeStamp1);输出:15246

百度地图在项目中的使用(JS)

废话先: 这个项目是使用ASP.NET MVC 写的,而关于百度地图在项目中的应用不限于ASP.NET MVC 因为我大部分的API的使用是通过Javascript,想在项目中使用百度地图,你得先成为百度的开发者,具体的步骤,在本篇博文中不多叙述. 主题: 在使用百度地图的时候,你得先要获得一个ak 这里就是点击创建应用,它提供了几个类别1.for server  2.for mobile 3.for browser,在这里呢,因为我们是通过一个for browser来了解百度地图,所以在创建应

webpack4.0在项目中的安装配置

webpack4.0在项目中的安装配置 最近在学vue,刚好学到了webpack,因为看的教程比较老,他们用的都是webpck4.0以下的版本,我一步一步跟着教程的步骤来,发现教程里一点问题都没有,到我自己做的时候就遇到了几个坑,趁着还记得比较清楚,把它记下来. 安装webpack 全局安装webpack: 命令行执行: npm i webpack -g 局部安装(项目中安装): 我用的是VSCode,在VSCode的 powershell 终端中直接运行 cnpm i webpack -D 项

vue项目中遇到的那些事。

前言 有好几天没更新文章了.这段实际忙着做了一个vue的项目,从 19 天前开始,到今天刚好 20 天,独立完成. 做vue项目做这个项目一方面能为工作做一些准备,一方面也精进一下技术. 技术栈:vue2 + vuex + vue-router + webpack + ES6/7 + element-ui + vue-baidu-map + i18n + vue-awesome-swiper 做项目时总是有一些思考和踩过的坑,对以后有一定的帮助,今天就来写写做vue项目遇到的那些事. 假如你正准

工作那些事(二十七)项目经理在项目中是什么角色?

项目经理在项目中是什么角色? 有人说,项目经理就是一个求人的差事,你是在求人帮你做事.这样的说法在中国特色下,有一定道理.可是,我不全然认同.我认为项目经理室一个为项目组人员服务的角色.更像是后勤保障部长的角色. 有人说.项目经理就是一个与人扯皮的差事,你要不断的与开发.产品.測试等之间沟通.协调. 有人说,有人的地方,就有江湖,有江湖的地方,就有规矩.确实,在做项目的时候,有的人是为了完毕功能,有的人是为了学到东西,有的人是为了混日子. 哪种人最适合你的项目?你的项目.有没有被所谓的专家坑过?