解決同時修改同一SQL記錄的問題

2022-02-27 21:42:57 字數 2531 閱讀 8981

在尋找powerdesigner相關資訊的時候偶然發現的.使用timestamp

微軟msdn內容:

timestamp (transact-sql)

公開資料庫中自動生成的唯一二進位制數字的資料型別。timestamp通常用作給錶行加版本戳的機制。 儲存大小為 8 個位元組。timestamp資料型別只是遞增的數字,不保留日期或時間。 若要記錄日期或時間,請使用datetime資料型別。

備註 每個資料庫都有乙個計數器,當對資料庫中包含timestamp列的表執行插入或更新操作時,該計數器值就會增加。 該計數器是資料庫時間戳。 這可以跟蹤資料庫內的相對時間,而不是時鐘相關聯的實際時間。 乙個表只能有乙個timestamp列。 每次修改或插入包含timestamp列的行時,就會在timestamp列中插入增量資料庫時間戳值。 這一屬性使timestamp列不適合作為鍵使用,尤其是不能作為主鍵使用。 對行的任何更新都會更改 timestamp 值,從而更改鍵值。 如果該列屬於主鍵,那麼舊的鍵值將無效,進而引用該舊值的外來鍵也將不再有效。 如果該錶在動態游標中引用,則所有更新均會更改游標中行的位置。 如果該列屬於索引鍵,則對資料行的所有更新還將導致索引更新。

使用某一行中的timestamp列可以很容易地確定該行中的任何值自上次讀取以後是否發生了更改。 如果對行進行了更改,就會更新該時間戳值。 如果沒有對行進行更改,則該時間戳值將與以前讀取該行時的時間戳值一致。 若要返回資料庫的當前時間戳值,請使用

transact-sqltimestamp資料型別不同於在 sql-2003 標準中定義的timestamp資料型別。 sql-2003timestamp資料型別等同於 transact-sqldatetime資料型別。

我的測試結果:

--建立乙個table

create table tmp1

(name varchar(20),

timestamp)go

--插入記錄

insert into tmp1 values('tony',null)

select * from tmp1

go--執行結果(因為之前已經有插入過了.所以是d):tony  0x000000000000300d

--修改記錄

update tmp1 set name='tonywu'

select * from tmp1

go--執行結果:tonywu 0x000000000000300e

update tmp1 set name='tony wu'

select * from tmp1

go--執行結果:tony wu 0x000000000000300f

--再插入一筆

insert into tmp1 values('wgj',null)

select * from tmp1

--執行結果:

--tony wu 0x000000000000300f

--wgj  0x0000000000003010

update tmp1 set name='w g j' where name='wgj'

select * from tmp1

--執行結果:

--tony wu 0x000000000000300f

--w g j  0x0000000000003012

update tmp1 set name='tony wu' where name='tony wu'

select * from tmp1

--執行結果:

--tony wu 0x0000000000003013

--w g j  0x0000000000003012

--再建另乙個表

create table tmp2

(no varchar(20),

timestamp)go

insert into tmp2 values('ab001',null)

goselect * from tmp2

--執行結果:

--ab001  0x0000000000003014

--得到這個資料庫的當前的計數值

select @@dbts

--執行結果:0x0000000000003014

--測試刪除會不會影響計數值

delete from tmp

select @@dbts

--執行結果:0x0000000000003014

測試結果.這個計數值是全庫唯一的,只要對庫內的記錄進行增/改操作,此計數器就會++.

使用者在修改記錄時先取出計數器值.儲存時再對出此記錄的計數器做對比,就知道是否有其他使用者已經修改過.就可以通知使用者是覆蓋記錄還是合併記錄.. :-)

解決多程序或多執行緒同時讀寫同乙個檔案的問題

解決多程序或多執行緒同時讀寫同乙個檔案的問題 php是沒有多執行緒概念的,儘管如此我們仍然可以用 不完美 的方法來模擬多執行緒。簡單的說,就是佇列處理。通過對檔案進行 加鎖和解鎖 來實現。當乙個檔案被乙個使用者操作時,該檔案是被鎖定的,其他使用者只能等待,確實不夠完美,但是也可以滿足一些要求不高的應...

並行事務同時更新同一條記錄

程式大概 sql語句 首先除錯程式,等程式斷下來之後,在瀏覽器重新發起一次請求,模擬雙線程。這時除錯視窗有執行緒 ps 這裡用到的是mysql自帶的連線池 事務開始但還沒更新該記錄時,該行還未被鎖定,這是還可以更新 這時6號執行緒下一步就執行更新操作了 6號執行緒執行完之後,由於事務id為14的記錄...

SQL篩選出同一學科的時間最新的記錄

1.建表語句 create table score id int 11 not null auto increment,student id int 11 not null default 0 comment 學生表id name varchar 50 null default null comme...