要在网站上处理并发,通常的做法是在每条记录上都有一列,以便您检查自获得以来是否未更新。上次更新日期或顺序版本号(由触发器自动递增)。
通常,您将读取数据(加上并发列)
SELECt seat,etc,version_noFROM t1WHERe column = a_value
然后,当用户最终准备预订座位时,除非有更新,否则更新将起作用。
(版本号或更新日期将在每次更新后更改)
BEGIN UPDATE t1 SET seatTaken = true WHERe seatid = ..... AND version_no = p_version RETURNING version_no INTO p_version;EXCEPTION WHEN NOT_FOUND THEN --Generate a custom exception --concurrency viloation the record has been updated alreadyEND;
自动更新版本号的触发器看起来像这样
CREATE OR REPLACE TRIGGER t1_versionAFTER INSERT OR UPDATE ON t1FOR EACH ROWBEGIN IF :new.version_no IS NULL THEN :new.version_no := 0; ELSE :new.version_no := :old.version_no + 1; END IF;END;



