婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > SQL Server時(shí)間戳功能與用法詳解

SQL Server時(shí)間戳功能與用法詳解

熱門(mén)標(biāo)簽:電銷(xiāo)需要外呼系統(tǒng)嗎 千呼電話(huà)機(jī)器人可以試用嗎 我要地圖標(biāo)注數(shù)量有限制嗎 家庭農(nóng)場(chǎng)地圖標(biāo)注名稱(chēng)怎樣起名 互聯(lián)網(wǎng)電話(huà)外呼系統(tǒng) 電話(huà)機(jī)器人怎么代理商 400電話(huà)辦理泰安 零成本地圖標(biāo)注賺錢(qián) 安卡拉地圖標(biāo)注app

本文實(shí)例講述了SQL Server時(shí)間戳功能與用法。分享給大家供大家參考,具體如下:

一直對(duì)時(shí)間戳這個(gè)概念比較模糊,相信有很多朋友也都會(huì)誤認(rèn)為:時(shí)間戳是一個(gè)時(shí)間字段,每次增加數(shù)據(jù)時(shí),填入當(dāng)前的時(shí)間值。其實(shí)這誤導(dǎo)了很多朋友。

1.基本概念

時(shí)間戳:數(shù)據(jù)庫(kù)中自動(dòng)生成的唯一二進(jìn)制數(shù)字,與時(shí)間和日期無(wú)關(guān)的, 通常用作給表行加版本戳的機(jī)制。存儲(chǔ)大小為 8個(gè)字節(jié)。

每個(gè)數(shù)據(jù)庫(kù)都有一個(gè)計(jì)數(shù)器,當(dāng)對(duì)數(shù)據(jù)庫(kù)中包含 timestamp 列的表執(zhí)行插入或更新操作時(shí),該計(jì)數(shù)器值就會(huì)增加。該計(jì)數(shù)器是數(shù)據(jù)庫(kù)時(shí)間戳。這 可以跟蹤數(shù)據(jù)庫(kù)內(nèi)的相對(duì)時(shí)間,而不是時(shí)鐘相關(guān)聯(lián)的實(shí)際時(shí)間。一個(gè)表只能有一個(gè) timestamp 列。每次修改或插入包含 timestamp 列的行 時(shí),就會(huì)在 timestamp 列中插入增量數(shù)據(jù)庫(kù)時(shí)間戳值。這一屬性使 timestamp 列不適合作為鍵使用,尤其是不能作為主鍵使用。對(duì)行的任 何更新都會(huì)更改 timestamp 值,從而更改鍵值。如果該列屬于主鍵,那么舊的鍵值將無(wú)效,進(jìn)而引用該舊值的外鍵也將不再有效。如果該表在動(dòng)態(tài)游標(biāo) 中引用,則所有更新均會(huì)更改游標(biāo)中行的位置。如果該列屬于索引鍵,則對(duì)數(shù)據(jù)行的所有更新還將導(dǎo)致索引更新。

使用某一行中的 timestamp 列可以很容易地確定該行中的任何值自上次讀取以后是否發(fā)生了更改。如果對(duì)行進(jìn)行了更改,就會(huì)更新該時(shí)間戳值。如果沒(méi)有對(duì)行進(jìn)行更改,則該時(shí)間戳值將與以前讀取該行時(shí)的時(shí)間戳值一致。若要返回?cái)?shù)據(jù)庫(kù)的當(dāng)前時(shí)間戳值,請(qǐng)使用 @@DBTS。

2.時(shí)間戳的作用

在控制并發(fā)時(shí)起到作用:

用戶(hù)A/B同時(shí)打開(kāi)某條記錄開(kāi)始編輯,保存是可以判斷時(shí)間戳,因?yàn)橛涗浢看伪桓聲r(shí),系統(tǒng)都會(huì)自動(dòng)維護(hù)時(shí)間戳,所以如果保存時(shí)發(fā)現(xiàn)取出來(lái)的時(shí)間戳與數(shù)據(jù)庫(kù)中的時(shí)間戳不相等,說(shuō)明在這個(gè)過(guò)程中記錄被更新過(guò),這樣的話(huà)可以防止別人的更新被覆蓋。

3.時(shí)間戳的應(yīng)用

簡(jiǎn)單說(shuō)一下,timestamp 主要是記錄該行的最后修改時(shí)間戳,注意,這個(gè)時(shí)間戳是不可以轉(zhuǎn)換為時(shí)間的,只能標(biāo)注該行修改了。

有 什么用呢?通常是用在數(shù)據(jù)增量更新方面,比如說(shuō),我從該表復(fù)制數(shù)據(jù)到另外一個(gè)表,但是如果我想只復(fù)制更新過(guò)的,那么從最后一次更新的時(shí)候,記錄最大的 timestamp的值,然后在當(dāng)前更新的時(shí)候,只要where條件找出大于最后一次更新的 timestamp 值的所有行。然后抽取到更新過(guò)的數(shù)據(jù),進(jìn)行復(fù)制到另外一個(gè)服務(wù)器,這就是增量更新用到的。

4.在SQL中的應(yīng)用例子

(微軟的建議 -- timestamp 語(yǔ)法已被取代,在 DDL 語(yǔ)句,請(qǐng)盡量使用 rowversion 而不是 timestamp。未來(lái)的 Microsoft SQL Server 版本將移除這項(xiàng)功能。

參見(jiàn)http://msdn.microsoft.com/zh-cn/library/ms182776.aspx)

rowversion 就是timestamp

丟失更新的解決方法如下:

丟失更新概念:當(dāng)用戶(hù)同時(shí)修改一行數(shù)據(jù),他們先讀取數(shù)據(jù),放在前端進(jìn)行修改,當(dāng)修改后,再提交數(shù)據(jù),這樣最后提交的數(shù)據(jù)會(huì)覆蓋先前提交的數(shù)據(jù),這樣就造成了丟失更新。

長(zhǎng)話(huà)短說(shuō),介紹防止丟失更新的方法: 使用rowversion 時(shí)間戳。
每次更新的時(shí)候,mssql都會(huì)自動(dòng)的更新rowversion的值,若一行在讀前與更新前的值前后不一致,就說(shuō)明有其他的事務(wù)更新了此列,這樣就可以不更新此列,從而防止了丟失更新的情況。

例子 :

先創(chuàng)建一個(gè)表:

declare table tmp(a varchar(10),b rowsversion)
insert into tmp(a) values( 'abc') 

事務(wù)A:(新建查詢(xún)   執(zhí)行下列代碼)

declare @rv rowversion
select @rv=b from tmp where a='abc'
waitfor delay '00:00:05' --休息5秒
update tmp set a='xyz' where b=@rv
go

事務(wù)B: (再新建查詢(xún)   執(zhí)行下列代碼)

declare @rv rowversion
select @rv=b from tmp where a='abc'
update tmp set a='aaa' where b=@rv
go

事務(wù)A在執(zhí)行完畢后會(huì)發(fā)現(xiàn)并沒(méi)有將'aaa'給抹去,這樣就防止了丟失更新的現(xiàn)象。

PS:關(guān)于時(shí)間戳這里再為大家提供一個(gè)Unix時(shí)間戳在線轉(zhuǎn)換工具,附帶了關(guān)于Unix時(shí)間戳的說(shuō)明,以及Java、Javascript、MySQL、SQL Server、PostgreSQL、PHP等程序設(shè)計(jì)語(yǔ)言及數(shù)據(jù)庫(kù)的時(shí)間戳使用技巧:

Unix時(shí)間戳(timestamp)轉(zhuǎn)換工具:
http://tools.jb51.net/code/unixtime

更多關(guān)于SQL Server相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《SQL Server存儲(chǔ)過(guò)程技巧大全》、《SQL Server查詢(xún)操作技巧大全》、《SQL Server索引操作技巧大全》、《SQL Server分頁(yè)技術(shù)總結(jié)》及《SQL Server常用函數(shù)匯總》

希望本文所述對(duì)大家SQL Server數(shù)據(jù)庫(kù)程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • 詳解MySQL日期 字符串 時(shí)間戳互轉(zhuǎn)
  • MySQL中日期和時(shí)間戳互相轉(zhuǎn)換的函數(shù)和方法
  • C#更新SQLServer中TimeStamp字段(時(shí)間戳)的方法
  • ms sql server中實(shí)現(xiàn)的unix時(shí)間戳函數(shù)(含生成和格式化,可以和mysql兼容)
  • mysql之TIMESTAMP(時(shí)間戳)用法詳解
  • sqlite時(shí)間戳轉(zhuǎn)時(shí)間語(yǔ)句(時(shí)間轉(zhuǎn)時(shí)間戳)
  • PHP+Mysql日期時(shí)間如何轉(zhuǎn)換(UNIX時(shí)間戳和格式化日期)
  • FROM_UNIXTIME 格式化MYSQL時(shí)間戳函數(shù)
  • mysql時(shí)間戳轉(zhuǎn)成常用可讀時(shí)間格式的兩種方法
  • PostgreSQL更新表時(shí)時(shí)間戳不會(huì)自動(dòng)更新的解決方法

標(biāo)簽:來(lái)賓 大同 濱州 文山 新鄉(xiāng) 池州 黃山 東營(yíng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL Server時(shí)間戳功能與用法詳解》,本文關(guān)鍵詞  SQL,Server,時(shí)間,戳,功能,與,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL Server時(shí)間戳功能與用法詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于SQL Server時(shí)間戳功能與用法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 辉县市| 克拉玛依市| 于田县| 宁津县| 松原市| 准格尔旗| 信丰县| 安西县| 大安市| 元江| 葫芦岛市| 安平县| 嵊州市| 卢湾区| 沿河| 宜州市| 古浪县| 宾川县| 弥勒县| 仁怀市| 湘阴县| 噶尔县| 济宁市| 客服| 子长县| 北票市| 无极县| 哈巴河县| 岑溪市| 施甸县| 南安市| 安仁县| 蕲春县| 家居| 正定县| 长垣县| 焦作市| 义马市| 盐津县| 米脂县| 江都市|