亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

mysql觸發器實現oracle物化視圖示例代碼

2024-07-24 13:05:23
字體:
來源:轉載
供稿:網友

oracle數據庫支持物化視圖--不是基于基表的虛表,而是根據表實際存在的實表,即物化視圖的數據存儲在非易失的存儲設備上。
下面實驗創建ON COMMIT 的FAST刷新模式,在mysql中用觸發器實現insert , update , delete 刷新操作
1、基礎表創建,Orders 表為基表,Order_mv為物化視圖表

復制代碼 代碼如下:


mysql> create table Orders(
-> order_id int not null auto_increment,
-> product_name varchar(30)not null,
-> price decimal(10,0) not null ,
-> amount smallint not null ,
-> primary key (order_id));
Query OK, 0 rows affected
mysql> create table Order_mv(
-> product_name varchar(30) not null,
-> price_sum decimal(8.2) not null,
-> amount_sum int not null,
-> price_avg float not null,
-> order_cnt int not null,
-> unique index(product_name));
Query OK, 0 rows affected


2、insert觸發器

復制代碼 代碼如下:


delimiter $$
create trigger tgr_Orders_insert
after insert on Orders
for each row
begin
set @old_price_sum=0;
set @old_amount_sum=0;
set @old_price_avg=0;
set @old_orders_cnt=0;

select ifnull(price_sum,0),ifnull(amount_sum,0),ifnull(price_avg,0),ifnull(order_cnt,0)
from Order_mv
where product_name=new.product_name
into @old_price_sum,@old_amount_sum,@old_price_avg,@old_orders_cnt;

set @new_price_sum=@old_price_sum+new.price;
set @new_amount_sum=@old_amount_sum+new.amount;
set @new_orders_cnt=@old_orders_cnt+1;
set @new_price_avg=@new_price_sum/@new_orders_cnt;

replace into Order_mv
values(new.product_name,@new_price_sum,@new_amount_sum,@new_price_avg,@new_orders_cnt);
end;
$$
delimiter ;


3、update觸發器

復制代碼 代碼如下:


delimiter $$
create trigger tgr_Orders_update
before update on Orders
for each row
begin
set @old_price_sum=0;
set @old_amount_sum=0;
set @old_price_avg=0;
set @old_orders_cnt=0;

set @cur_price=0;
set @cur_amount=0;

select price,amount from Orders where order_id=new.order_id
into @cur_price,@cur_amount;

select ifnull(price_sum,0),ifnull(amount_sum,0),ifnull(price_avg,0),ifnull(order_cnt,0)
from Order_mv
where product_name=new.product_name
into @old_price_sum,@old_amount_sum,@old_price_avg,@old_orders_cnt;

set @new_price_sum=@old_price_sum-@cur_price+new.price;
set @new_amount_sum=@old_amount_sum-@cur_amount+new.amount;
set @new_orders_cnt=@old_orders_cnt;
set @new_price_avg=@new_price_sum/@new_orders_cnt;

replace into Order_mv
values(new.product_name,@new_price_sum,@new_amount_sum,@new_price_avg,@new_orders_cnt);
end;
$$
delimiter ;


4、delete觸發器

復制代碼 代碼如下:


delimiter $$
create trigger tgr_Orders_delete
after delete on Orders
for each row
begin
set @old_price_sum=0;
set @old_amount_sum=0;
set @old_price_avg=0;
set @old_orders_cnt=0;

set @cur_price=0;
set @cur_amount=0;

select price,amount from Orders where order_id=old.order_id
into @cur_price,@cur_amount;

select ifnull(price_sum,0),ifnull(amount_sum,0),ifnull(price_avg,0),ifnull(order_cnt,0)
from Order_mv
where product_name=old.product_name
into @old_price_sum,@old_amount_sum,@old_price_avg,@old_orders_cnt;

set @new_price_sum=@old_price_sum - old.price;
set @new_amount_sum=@old_amount_sum - old.amount;
set @new_orders_cnt=@old_orders_cnt - 1;

if @new_orders_cnt>0 then
set @new_price_avg=@new_price_sum/@new_orders_cnt;
replace into Order_mv
values(old.product_name,@new_price_sum,@new_amount_sum,@new_price_avg,@new_orders_cnt);
else
delete from Order_mv where product_name=@old.name;
end if;
end;
$$
delimiter ;


5、這里delete觸發器有一個bug,就是在一種產品的最后一個訂單被刪除的時候,Order_mv表的更新不能實現,不知道這算不算是mysql的一個bug。當然,如果這個也可以直接用sql語句生成數據,而導致的直接后果就是執行效率低。

復制代碼 代碼如下:


-> insert into Order_mv
-> select product_name ,sum(price),sum(amount),avg(price),count(*) from Orders
-> group by product_name;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91香蕉亚洲精品| 青青在线视频一区二区三区| 亚洲在线观看视频网站| 欧美黄色www| 91性高湖久久久久久久久_久久99| 成人伊人精品色xxxx视频| 久久久久久高潮国产精品视| 亚洲精品自在久久| 欧美激情成人在线视频| 欧美亚洲成人网| 日韩在线视频观看正片免费网站| 欧美综合在线观看| 精品动漫一区二区三区| 久久久综合免费视频| 在线观看欧美成人| 亚洲电影成人av99爱色| 国产欧美精品一区二区三区介绍| 久久久女人电视剧免费播放下载| 色777狠狠综合秋免鲁丝| 亚洲xxx自由成熟| 久久成人综合视频| 在线播放国产精品| 国产精品扒开腿做爽爽爽的视频| 91国在线精品国内播放| 亚洲天堂网站在线观看视频| 色诱女教师一区二区三区| 久久人人爽亚洲精品天堂| 亚洲第一天堂av| 亚洲精品黄网在线观看| 国产精品成人观看视频国产奇米| 国产999在线观看| 亚洲aⅴ男人的天堂在线观看| 激情亚洲一区二区三区四区| 国产日韩欧美综合| 亚洲性xxxx| 国产成人精品在线| 国产激情久久久久| 久久久久久网址| 亚洲第一福利视频| 国产一区二区美女视频| 国内揄拍国内精品少妇国语| 成人欧美一区二区三区黑人孕妇| 夜夜躁日日躁狠狠久久88av| 日韩欧美国产激情| 欧美激情亚洲综合一区| 97婷婷大伊香蕉精品视频| 亚洲天堂2020| 欧美性受xxxx黑人猛交| 国产精品pans私拍| 日韩欧美精品网站| 亚洲第一视频在线观看| 亚洲精品电影网| 国产精品久久久久一区二区| 最好看的2019的中文字幕视频| 亚洲国产精品va在线看黑人| 一区二区三区日韩在线| 91在线精品播放| 在线电影中文日韩| 疯狂欧美牲乱大交777| 久久久久五月天| 91九色视频在线| 国产精品偷伦视频免费观看国产| 成人精品视频99在线观看免费| 欧美裸体xxxx极品少妇软件| 国产在线播放不卡| 亚洲а∨天堂久久精品喷水| 亚洲女在线观看| 日韩av在线播放资源| 欧美成人一二三| 亚洲第一色在线| 亚洲另类xxxx| 秋霞成人午夜鲁丝一区二区三区| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲国产成人久久综合| 欧美日韩免费观看中文| 国产精品久久久久久久久影视| 4438全国亚洲精品在线观看视频| 国语自产精品视频在线看| 色香阁99久久精品久久久| 91精品在线播放| 91免费看片网站| 国产激情视频一区| 日韩欧美在线第一页| 日韩av电影国产| 九九精品视频在线观看| 91产国在线观看动作片喷水| 精品福利免费观看| 国产精品久久久久久久久久免费| 亚洲视频国产视频| 国产精品第七十二页| 国产日韩欧美中文| 久久精品国产2020观看福利| 国产精品久久国产精品99gif| 亚洲精品720p| 久久久久国产视频| 国产成人精品优优av| 欧美激情按摩在线| 欧美一级在线亚洲天堂| 成人高h视频在线| 中文字幕日韩有码| 91理论片午午论夜理片久久| 欧美一级视频一区二区| 久久av在线播放| 久久久久国产一区二区三区| 欧美激情xxxx| 亚洲精品720p| 亚洲欧美日韩久久久久久| 亚洲性猛交xxxxwww| 久久久久五月天| 国产精品视频在线观看| 日韩视频在线一区| 中文字幕日韩在线播放| 国语自产精品视频在线看一大j8| 亚洲一区二区久久久| 亚洲精品日韩久久久| 中文字幕在线看视频国产欧美在线看完整| 91日本在线视频| 欧美国产中文字幕| 欧美疯狂做受xxxx高潮| 91视频国产一区| 亚洲剧情一区二区| 成人性生交大片免费观看嘿嘿视频| 国产成人极品视频| 成人亲热视频网站| 亚洲国产精品美女| 久久九九热免费视频| 日韩免费在线免费观看| 国产精品自拍视频| 热草久综合在线| 日韩免费av片在线观看| 久久欧美在线电影| 91精品视频在线| 国产一区二区视频在线观看| 久久久久这里只有精品| 97精品免费视频| 欧美性开放视频| 欧美日本在线视频中文字字幕| 精品久久久久久国产| 国产成人精品一区二区| 成人国产精品一区二区| 国产视频精品久久久| 亚洲少妇激情视频| 永久免费精品影视网站| 日韩精品免费一线在线观看| 亚洲一区二区三区在线视频| 国产香蕉一区二区三区在线视频| 奇米一区二区三区四区久久| 91美女高潮出水| 日韩精品免费电影| 国产成人a亚洲精品| 在线午夜精品自拍| 国产精品www网站| 78m国产成人精品视频| 久久国产天堂福利天堂| 亚洲成人亚洲激情| 久久视频这里只有精品| 亚洲精品综合久久中文字幕| 久久久精品一区| 日韩一区av在线| 粉嫩老牛aⅴ一区二区三区| 91精品视频在线看| 精品亚洲一区二区三区四区五区| 精品视频在线播放免| 日韩av第一页|