日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

触发器_差之毫厘谬以千里

發布時間:2024/1/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 触发器_差之毫厘谬以千里 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在學習數據庫的相關知識(啊,啊,啊,我不想說我是為了準備考試,否則好丟人啊。。。)
課本名:《全國計算機等級考試三級教程–數據庫技術 2013年版》
高等教育出版社

剛學習到關于觸發器的知識,
發現書上有一個致命的錯誤(哈哈,致命是昨天剛學到的詞匯)
課本164頁,第八章,在介紹觸發器的時候
舉的第一個例子:創建后觸發型觸發器
因為少了一個where條件,會將所有商品的庫存量全部進行修改!!

=====>
背景:
table_salebilldetail 表達的是銷售單據明細表
其主鍵為:salebillid 銷售單據id
goodsid 商品id
另外還有一個屬性:quantity 表達商品銷售的數量

table_goods 商品表
主鍵:goodsid 商品id
屬性值: totalstorage 商品的庫存數量
=====>
要求:
當銷售單據明細表中的商品銷售數量大于此商品的庫存數量(商品表中)時,撤銷此次商品的銷售并提示錯誤。如果銷售數量小于庫存數量,則在插入銷售單據明細記錄時,同時修改此商品的庫存數量。
=====>
課本的代碼如下:

create trigger trigger_1 on table_salebilldetail for insert
as

if exists(select 1 from inserted a join table_goods b on a.goodsid = b.goodsid where a.quantity > b.totalstorage)
begin
rollback;
print ‘not encough to sale!’
end

else
update table_goods
set totalstorage = totalstorage - (select quantity from inserted)

=====>
啊,啊, 啊
發現問題沒有?
如果 quantity < totalstorage 時,進入else語句
接下來呢?
接下來是,所有商品的totalstorage 都被 減了 quantity的量啦!!
這是什么情況?

這是一件多么可怕的事情!!
如果書上的這段代碼被用到實際應用系統中,老總估計要瘋了。。。。

=====>
正確的語法應該是這樣的:

create trigger trigger_1 on table_salebilldetail for insert
as

if exists(select 1 from inserted a join table_goods b on a.goodsid = b.goodsid where a.quantity > b.totalstorage)
begin
rollback;
print ‘not encough to sale!’
end

else
update table_goods
set totalstorage = totalstorage - (select quantity from inserted)
where goodsid = (select goodsid from inserted);

=====>
看到區別了沒有?
其實就多了一句 where 條件啊!
這樣就只減少了 inserted 進來的商品的 totalstorage的量!!

=====>
寫代碼,還是要細心細心再細心啊
一定要把邏輯理理清楚,多嘗試,多思考
才能真正把代碼寫好。。

=====>
ps:當然,這里還少了對quantity的判斷,因為如果quantity <=0 的話,肯定會進到else中,這樣邏輯上就不對了
我們可以在進入else時再進行一次判斷:
else if (quantity <=0)
begin
rollback;
print ‘Error for quantity!’;
end
else
下面再接else的內容。。。。

總結

以上是生活随笔為你收集整理的触发器_差之毫厘谬以千里的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。