1. 程式人生 > >【併發操作】多使用者併發操作的解決方案

【併發操作】多使用者併發操作的解決方案

首先,這個問題只有在特殊情況下才算是問題,大多數情況下可以不作考慮。

然後,這是問題很難描述清楚,解決方案有多種,下面提供一種較方便易用的方式

場景(問題)描述如下:

0,使用者A、B同時開啟一個頁面,頁面顯示,客戶表T_CUSTOMER欄位(C_NAME、C_AGE)

姓名:張三,年齡:25

1,A 將姓名“張三”改為“張三1”,然後儲存

2,B 將年齡“25”改為“30”,然後儲存

這樣A的操作就被覆蓋了,姓名又變回“張三”了,大家一般怎麼處處這種情況?

這裡給出一個較易用的解決方案

給表新增一欄位:LAST_UPDATE,即最後更新時間

回放場景

0,使用者A、B同時開啟一頁面,面頁顯示:

姓名:張三,年齡:25,LAST_UPDATE:2008-10-17 13:45:00

1,A 將姓名“張三”改為“張三1”,然後儲存

重點在這裡:更新資料時WHERE條件裡多一條件:AND LAST_UPDATE = '2008-10-17 13:45:00'

更新成功,此時觸發器會將當前時間“2008-10-17 13:46:00”賦值給LAST_UPDATE

2,B 將將年齡“25”改為“30”,然後儲存

B更新資料時WHERE條件裡也有這個條件:AND LAST_UPDATE = '2008-10-17 13:45:00',但此時LAST_UPDATE的值已經在A修改記錄時變成2008-10-17 13:46:00

下面要做的就是給出提示了:喔喲,此資訊在你發呆這段時間已被人改過啦,所以你需要返工。

觸發器程式碼如下:
===================================================
CREATE OR REPLACE TRIGGER T_CUSTOMER
BEFORE UPDATE ON T_CUSTOMER
FOR EACH ROW
/*
記錄最後修改時間
*/
BEGIN
:NEW.LAST_UPDATE := SYSDATE;
END;
===================================================

如果觸發器不熟悉或者只是不喜歡用觸發器,完全可以修改記錄時同時給LAST_UPDATE欄位賦值,以此替代觸發器的作用。

相關推薦

Java併發基礎Java記憶體模型解決有序性和可見性

前言 解決併發程式設計中的可見性和有序性問題最直接的方法就是禁用CPU快取和編譯器的優化。但是,禁用這兩者又會影響程式效能。於是我們要做的是按需禁用CPU快取和編譯器的優化。 如何按需禁用CPU快取和編譯器的優化就需要提到Java記憶體模型。Java記憶體模型是一個複雜的規範。其中最為重要的便是Happens

Java併發基礎加鎖機制解決原子性問題

前言 原子性指一個或多個操作在CPU執行的過程不被中斷的特性。前面提到原子性問題產生的源頭是執行緒切換,而執行緒切換依賴於CPU中斷。於是得出,禁用CPU中斷就可以禁止執行緒切換從而解決原子性問題。但是這種情況只適用於單核,多核時不適用。 以在 32 位 CPU 上執行 long 型變數的寫操作為例來說明。

python Dict python 字典操作

div 調用 clear 時報 bsp 找到 ict strong 數字 python字典 是一個無序、以鍵值對存儲的數據類型,數據關聯性強、唯一一個映射數據類型。鍵:必須是可哈希(不可變的數據類型:字符串、數字、元組、bool)值,並且是唯一的 None: none 是一

基礎操作1.表操作

create table number alter -- 1.基本表操作表 drop table user1; create table user1( id number(5,3) not null, -- (N,M) N:一共幾位,M:小數後幾位 name varchar2(10

TP5.0model的操作方法

新增 src ted lse 圖片 希望 ace 復制代碼 推薦 //默認主鍵為自動識別,如果需要指定,可以設置屬性: namespace app\index\model; use think\Model; class User extends Model {

nosql-redisjava直接操作redis

redis入門,百度網盤 連結: https://pan.baidu.com/s/11onVTGqf7uyCGxkoQOxdTw 密碼: csef 1 redis.properties 直接配置在classpath下面 #*****************jedis連線引數

python Elasticsearchpython 簡單操作Elasticsearch

python提供了操作ElasticSearch 介面,因此要用python來操作ElasticSearch,首先要安裝python的ElasticSearch包 pip install elasticsearch 官網提供的python操作ES的簡單例子是

Ansible學習- 常用檔案操作模組之copy模組

簡介 copy模組用於將本地或遠端機器上的檔案拷貝到遠端主機上。 模組引數 名稱 必選 預設值 可選值 備註 backup no no

R語言合併行操作中data.frame與data.table的效能比較

測試案例說明 總資料量為M*N條。平均的分佈在N個data.frame/data.table變數中,每個變數為M行。 這N個變數儲存在list中,以1:N表示。list(data.frame)與list(data.table)。 將N個變數合併成一個。 N個

資料結構連結串列操作C實現

資料型別的定義 typedef int DataType; typedef struct ListNode { DataType data; struct ListNode *next; } ListNode; 連結串列的初始化和銷燬 連結串列的初

python 3 字典方法操作彙總

基礎資料型別:tuple 1.1  新增 dic["key"] = value                            字典中沒有key

python 3 列表方法操作彙總

基礎資料型別 : list   list主要操作:索引、切片、查詢、修改、增加、刪除、擴充套件、統計、排序、獲取下標、拷貝……   1.1  索引  由圖: list正向下標從0開始 list反向下標從-1開始 獲取下標對應的單個元

乾貨分享通過命令操作來學習Git

Git是一個開源的分散式版本控制系統,可以有效、高速的處理從很小到非常大的專案版本管理。Git是 Linus Torvalds為了幫助管理Linux核心開發而開發的一個開放原始碼的版本控制軟體。本篇文章將從原始的Git命令出發,學習實際開發過程中最常用、最

專案管理GitHub使用操作指南

$ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch $ git config --global ali

影象處理基本形態學操作

這裡涉及到的形態學操作,基本都是用模板對全圖進行卷積,操作簡單,是初級的影象處理。共識的集合處理符合這裡不多寫了。下面是定義: A是影象子集,A的補集寫為Ac. 集合B的反射A是一種對稱,寫為A^=

教程記錄使用idea操作git合併分支到主幹

最近在使用git,需要將分支合併到主幹,中間也遇到一些問題 步驟(從最開始說起): 首先,要確認的點 伺服器分支有: master :主幹,一般是最後的環境 develop: 開發,進行開發測試 (拉取程式碼從主幹拉,開發完畢後合併到develop,再發布測試)

git 分支—常用分支操作命令

前言   前面博文介紹了git分支的基本情況,這篇部落格來講解一下常見的git 分支操作命令。 Git 分支命令 1. 檢視分支 # 檢視本地分支 $ git branch # 檢視遠端分支 $ git branch -r # 檢視本地、伺服

驅動開發004 檔案操作

note:本文部分程式碼參考了《Windows核心安全與驅動開發》這本書 一、OBJECT_ATTRIBUTES          物件屬性結構。在ntdef.h檔案中有該結構的定義: typedef struct _OBJECT_ATTRIBUTES { ULO

git命令git遠端操作相關命令(remote 、push、fetch 、pull)

開發十年,就只剩下這套架構體系了! >>>   

Python基礎文件操作

操作文件 center spl 查看 補充 -a col ble none 文件操作 一 文件操作 二 打開文件的模式 三 操作文件的方法 四 文件內光標移動 五 文件的修改 參考:http://www.cnblogs.com/linhaifeng/ar