【併發操作】多使用者併發操作的解決方案
首先,這個問題只有在特殊情況下才算是問題,大多數情況下可以不作考慮。
然後,這是問題很難描述清楚,解決方案有多種,下面提供一種較方便易用的方式
場景(問題)描述如下:
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.0】model的操作方法
新增 src ted lse 圖片 希望 ace 復制代碼 推薦 //默認主鍵為自動識別,如果需要指定,可以設置屬性: namespace app\index\model; use think\Model; class User extends Model {
【nosql-redis】java直接操作redis
redis入門,百度網盤 連結: https://pan.baidu.com/s/11onVTGqf7uyCGxkoQOxdTw 密碼: csef 1 redis.properties 直接配置在classpath下面 #*****************jedis連線引數
【python Elasticsearch】python 簡單操作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