Sqlserver的标识列问题

Sqlserver的标识列问题,第1张

下面我们看一张表:想一想在数据库SQLServer中我们如何能更简便的向这张表格中添加数据呢?

仔细观察此表我们不难发现,ID字段的这列数据的添充是有规律可循的,它是一个等比自增的数列,向数据表中添加这样的数据有没有简单的方法呢?

这就谈到了SQLServer标识列的问题。我查询一些资料做了总结,在此和大家一起分享受与交流。

(1)标识列的定义

标识列,(通常也称为“标识字段”或者称为“自动增长字段”)是一行记录区别其它记录的标识,为的也是能唯一地检索出该行记录。

注意:一个表中只能有一个标识列(标识字段),一般是把“主键”设为标识列。

(2)如何把一个字段设为标识列?

下面我以SQLServer2008为例来看一下它的设置步骤:

如:右键单击——表Person3,左键单击——“设计”属性,然后选中要设为标识列的字段,在“标识规范”中,将字段的“是标识”设为“是”,最后关闭此窗口,保存即可。

从上图中“标识规范”中看到,标识列中还有个“标识种子”和“标识增量”,主要是为了避免重复值的出现,便于查询。

1.

标识种子

是开始的数是多少,默认为1。

2.

标识增量(也称为增长种子)是每增加一条数据增加的值是多少,默认为1。

3.

标识列不容许插入值,是自动给值的,强制给会报错。

identity(1,1)

那么该列标识种子是1,增长种子也是1。第一个参数是标实种子,第二个参数是增长种子。

注意:在设置标识列之前,要在—‘工具’菜单中找到—‘选项’—在选项中—把‘阻止保存要求重新建表的更改’的“√”去掉,否则SQLServer要修改表的标识列没法修改。

(3)设置标识列的好处

标识列是自动增长的,从种子开始,依次递增,递增量位自己设置的。比如:种子是1,增长量为1,那么标识列的值是:1、2、3、4、5……依次类推。所以你写Insert语句的时候,不用写标识列的值。

也就是说:标识列实现了字段自增,解决的是并发的问题,不用开发人员控制自增,SQLServer会自动分配标识列的值,如果两个人同时往数据库里面插数据时,将会产生唯一的自动增加为标识.

你好:

SQL Server timestamp 数据类型与时间和日期无关。SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序。实现 timestamp 数据类型最初是为了支持 SQL Server 恢复算法。每次修改页时,都会使用当前的 @@DBTS 值对其做一次标记,然后 @@DBTS 加1。这样做足以帮助恢复过程确定页修改的相对次序,但是 timestamp 值与时间没有任何关系。

我们知道数字类型有个“标识”属性,设置好“标识种子”、“标识递增量”,每增加一条记录时,这个字段的值就会在最近的一个标识值基础上自动增加,这样我们可以知道哪些记录是先添加的,哪些记录是后添加的,但是我们无法知道哪些记录修改过。timestamp这个类型的字段呢,每增加一条记录时,它会在最近的一个时间戳基础上自动增加,当修改某条记录时,它也会在最近的一个时间戳基础上自动增加,所以我们就知道哪些记录修改过了。

如何向SQLServer中的datatime类型字段插入日期数据2008年03月28日 星期五 17:23最近总是因日期类型而困惑,今天发现了其中的原因,拿出来总结一下:

在JAVA中如果通过JDBC访问MSSQL数据库,其实你可以这样向datatime类型字段插入日期数据:

...........................

........//连接数据库就不用写了

String sql="insert into datetest values(?,?)"//第一个参数name字段,第二个是datetime类型birthday字段

PreparedStatement ps=con.prepareStatement(sql)

//Timestamp st = new Timestamp(new Date().getTime())//创建Timestamp对象

//---------------------这句很重要

Timestamp st = new java.sql.Timestamp(new java.util.Date().getTime())//创建Timestamp对象

//--------------------------

ps.setString(1, "xiaoxu")

ps.setTimestamp(2, st)//向数据库插入数据

ps.executeUpdate()

我以前总是用ps.setDate(2,date)方式,结果就是插入不进去。可能是JAVA中date类型与MSSQL数据库中datetime不兼容吧!

你也可以用另种方法向datatime类型字段插入日期数据:

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm")

String date=sdf.format(new Date())

连接数据库

ps.setString(2, date)//也能向datatime类型字段插入日期数据ps.executeUpdate()

在JAVA中如果用Hibernate如何映射datetime类型呢?

在写javabean时用的是java.sql.Timestamp类型,但数据库里用的是Datetime类型(因为要保存时间),但我不想在数据库中用timestamp(很多数据,难改),

请问能直接把Timestamp映射成datetime类型么?

在Hibernate的映射配制文件中你可以直接类型指定成timestamp就行了!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11545188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存