91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql基礎三 觸發器

發布時間:2020-06-19 00:17:33 來源:網絡 閱讀:446 作者:lzf05303774 欄目:MySQL數據庫

商品表-- Table "goods" DDL:

CREATE TABLE goods (
gid int(11) NOT NULL,
name varchar(20) DEFAULT NULL,
num smallint(6) DEFAULT NULL,
PRIMARY KEY (gid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

訂單表-- Table "orders" DDL:

CREATE TABLE orders (
oid int(11) NOT NULL,
gid int(11) DEFAULT NULL,
much smallint(6) DEFAULT NULL,
create_time datetime DEFAULT NULL,
PRIMARY KEY (oid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

一、insert觸發器:
(1)、after觸發器:
需求:客戶購買某個商品后,商品的庫存數量自動減少。

create trigger trigerafterInsertOrder
after insert
on orders
for each row
begin

update goods set num=num-new.much where gid=new.gid;

end;

(2)、before觸發器:
需求:客戶購買某個商品后,商品的庫存數量自動減少。
同時訂單表的create_time為當前時間。

create trigger trigerbeforeInsertOrder
before insert
on orders
for each row
begin
update goods set num=num-new.much where gid=new.gid;
set new.create_time=now();

end;

注意:new 表示orders表新增行。

二、delete觸發器:

需求:客戶取消訂單后,商品表的庫存數量自動增加。

create trigger triggerDeleteOrder
after delete
on orders
for each row

begin

update goods set num=num+old.much where gid=old.gid

end;

注意:old 表示orders表刪除行。

三、update 觸發器:

需求:客戶修改訂單購買的數量,商品表的庫存數量自動改變。

create trigger triggerUpdateOrder
before update
on orders
for each row

begin

update goods set num=num+old.much-new.much where gid=old.gid;

end;


四、after和before觸發器的區別:

1、after是先完成數據的增刪改,再觸發,觸發的語句晚于監視的增刪改操作,無法影響前面的增刪改動作。

2、before是先完成觸發,再增刪改,觸發的語句先于監視的增刪改。

例1:對于上面的trigerbeforeInsertOrder這個觸發器,因為同時要對orders表的create_time字段賦值。
對字段create_time的賦值操作要早于insert,因此使用before觸發器。
注意:如果此時使用after觸發器會報Updating of new row is not allowed in after trigger 錯誤。

例2:爆倉業務的檢查即客戶購買某個商品,購買商品的數量如果超過庫存數量則購買數量為庫存數量,同時商品表的庫存數量自動改變。

create trigger triggerBeforeInsertOrder before insert on orders for each row

begin

declare kcNum int;

select num into kcNum from goods where gid=new.gid;

if new.much>kcNum then
set new.much=kuNum;
end if;

update goods set num=num-new.much where gid=new.gid;

end;

注意:如果此時使用after觸發器會報Updating of new row is not allowed in after trigger 錯誤。

五、觸發器引用行變量

下圖一目了然地描述了觸發器的行變量new和old。

mysql基礎三 觸發器
mysql基礎三 觸發器

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台湾省| 都昌县| 朔州市| 墨玉县| 安远县| 宝兴县| 阿拉善右旗| 吉安市| 平安县| 隆子县| 蕉岭县| 怀化市| 乐平市| 阿勒泰市| 左贡县| 大邑县| 中方县| 门源| 威远县| 乐平市| 刚察县| 昆山市| 桐梓县| 泗水县| 宁德市| 叶城县| 怀来县| 明光市| 靖远县| 乐陵市| 株洲县| 新兴县| 咸阳市| 安国市| 太仓市| 汤原县| 鹿邑县| 尚志市| 东海县| 厦门市| SHOW|