[轉
存在即更新,反之插入的需求是很常見的,很多人沒有注意併發的問題,高併發下為了避免唯一鍵衝突和死鎖情況,下面提供三種寫法,最後乙個是sql server 2008及以後版本適用。
示例表為:
use tempdb
gocreate
table tb_1 (id int
identity
primary
key,a varchar(50),dt datetime
default
getdate())
go寫法一:
begin
tran
ifexists (select
*from tb_1 with (updlock,serializable) where id=
100)
begin
update tb_1 set a=
'a100
'where id=
100end
else
begin
insert tb_1 (a) values ('
a100
')end
commit
tran
寫法二:
begin
tran
update tb_1 with (serializable) set a=
'a100
'where id =
100if
@@rowcount=0
begin
insert tb_1 (a) values ('
a100
')end
commit
tran
寫法三:
begin
tran
merge tb_1 with(serializable) as a
using(select
100as id) as b on a.id=b.id
when matched then
update
set a=
'a100
'when
not matched then
insert (a) values ('
a100
');commit
tran
PHP生成唯一ID的三種方法
1 md5 time mt rand 1,1000000 這種方法有一定的概率會出現重複 2 php內建函式uniqid uniqid 函式基於以微秒計的當前時間,生成乙個唯一的 id.w3school參考手冊有一句話 由於基於系統時間,通過該函式生成的 id 不是最佳的。如需生成絕對唯一的 id,...
Java三種獲取獲取唯一值的方法
第一種方式 通過nanotime 方法獲得 通過system類的nanotime 方法產生,理論上存在重複的可能,實際不會重複 public string uniquecodeone 第二種方式 通過uuid類 表示通用唯一識別符號的類 獲得唯一值,uuid表示乙個128位的值 public str...
鍊錶中插入乙個節點的三種情況
在鍊錶中插入乙個元素可以分為三種情況 1 在節點的時候 2 在鍊錶中間的任意位置 3 在鍊錶的最後位置,也可以認為這種情況為追加 這個就留到追加的時候來實現 下面是 的實現 sn insert s node sn head 傳入的引數是被插入鍊錶中的頭指標 sn insert node null,d...