开发许久了也是近期才接触时间戳请问在设计数据库上时间戳字段类型和日期字段类型有什么区别
==我知道的区别是时间戳是唯一的 而日期时间类型的可更改的,是否还有其他区别
在就是用时间戳和日期时间类型在查询SELECT上有什么性能优势么 是不是时间戳会效率高一些

解决方案 »

  1.   

    http://www.cnblogs.com/daytoday/archive/2012/01/05/2313241.html
      

  2.   

    注意,SQL Server timestamp 数据类型与时间、日期没有关系。SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序。实现 timestamp 数据类型最初是为了支持 SQL Server 恢复算法。每次修改页时,都会使用当前的 @@DBTS 值对其做一次标记,然后 @@DBTS 加1。这样做足以帮助恢复过程确定页修改的相对次序,但是 timestamp 值与时间没有任何关系。timestamp 这种数据类型表现自动生成的二进制数,确保这些数在数据库中是唯一的。timestamp 一般用作给表行加版本戳的机制。存储大小为 8 字节。下面是一个例子,你看看效果:
    --drop table xx--建表
    create table xx(id int,t timestamp)--添加数据 
    insert into xx(id) select 1 
    select *,
           datalength(t) as '占用字节数',
           cast(t as datetime)  '转化为日期型'
    from xx
    /*
    id t                 占用字节数  转化为日期型
    1 0x0000000000000FA2 8        1900-01-01 00:00:13.340
    */
      

  3.   

    所以,时间戳有它的特殊用途,也就是保持唯一性,当某条数据被修改过,那么表中的时间戳字段的值,会自动修改:--drop table xx--建表
    create table xx(id int,t timestamp)--添加数据 
    insert into xx(id) select 1 
    select *,
           datalength(t) as '占用字节数',
           cast(t as datetime)  '转化为日期型'
    from xx
    /*
    id t                 占用字节数  转化为日期型
    1 0x0000000000000FA2 8        1900-01-01 00:00:13.340
    */
    --修改数据
    update xx
    set id = 2
    where id = 1
    --我们并没有修改时间戳列的值,但是它的值会自动修改
    --在上面我们看到他的值是:0x0000000000000FA2
    select *
    from xx
    /*
    id t
    2 0x0000000000000FA3
    */