最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql視圖和觸發(fā)器使用過(guò)程

 更新時(shí)間:2022年12月07日 09:43:57   作者:小杰312  
這篇文章主要介紹了MySql視圖與觸發(fā)器使用過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

視圖

視圖是什么, 是否真實(shí)存在?

個(gè)人理解:視圖視圖,只是你可以看見(jiàn)的一層抽象層, 它并不真實(shí)存在, 而是在真實(shí)存在的一張或者多張表之上的一層封裝, 對(duì)于select查詢(xún)語(yǔ)句的提前封裝. 不涉及數(shù)據(jù)的存儲(chǔ).

這樣的一層封裝好處是蠻多的. 對(duì)于復(fù)雜查詢(xún)操作語(yǔ)句的簡(jiǎn)化 --- 方便后序使用.

安全性,我們?cè)谑褂靡晥D 時(shí),一般不會(huì)輕易通過(guò)視圖對(duì)底層數(shù)據(jù)進(jìn)行修改. 而且可以可以通過(guò)權(quán)限限制, 已得到更高的安全性.

官方定義:

視圖(view)是一種虛擬存在的表,是一個(gè)邏輯表(不涉及實(shí)際的存儲(chǔ)),本身并不包含數(shù)據(jù)。其內(nèi)容由查詢(xún)定義。

基表:用來(lái)創(chuàng)建視圖的表叫做基表;

通過(guò)視圖,可以展現(xiàn)基表的部分?jǐn)?shù)據(jù);

視圖數(shù)據(jù)來(lái)自定義視圖的查詢(xún)中使用的表,使用視圖動(dòng)態(tài)生成;

注意: 視圖的修改可以映射到基表, 也就是說(shuō), 視圖可以做到修改基表.

這個(gè)很多時(shí)候容易想不明白. 視圖只是一張?zhí)摂M表, 通過(guò)基表生成, 為什么我們還允許這張?zhí)摂M表數(shù)據(jù)的更改足以映射到基表?

針對(duì)單表映射而成的視圖而言, 視圖的修改可以映射到基表.

同樣, 基表數(shù)據(jù)的更改也會(huì)影響到視圖. 畢竟對(duì)視圖的各種操作也是映射到基表上面去的

其一,視圖并不保存數(shù)據(jù), 如果視圖修改的數(shù)據(jù)并不能映射到基表, 那么修改的這個(gè)數(shù)據(jù)就無(wú)法存儲(chǔ)下來(lái).

其二,個(gè)人一個(gè)理解, 視圖有些時(shí)候是更高層級(jí)的人維護(hù), 創(chuàng)建出來(lái)給開(kāi)發(fā)人員使用的, 開(kāi)發(fā)人員的操作應(yīng)該需要能映射到基表中. 為啥開(kāi)發(fā)人員都只是看視圖,而不是原表? 有些數(shù)據(jù)可能需要保密. 開(kāi)發(fā)人員也只能查看部分.

測(cè)試: 視圖和基表是否可以相互影響.

視圖的修改可以映射到基表, 驗(yàn)證如下.

驗(yàn)證基表的修改是否會(huì)映射到視圖 (也會(huì))

如何創(chuàng)建視圖?

create view view_name as (select 語(yǔ)句)

select語(yǔ)句可以是嵌套查詢(xún), 也可以是聯(lián)表查詢(xún)

創(chuàng)建之后相當(dāng)于是如下:

刪除視圖

drop view view_name;

查看視圖。 沒(méi)有單獨(dú)查看視圖的命令, 直接查看表就會(huì)看到視圖. 所以對(duì)于視圖我們的命名還是可以給與區(qū)分一下

視圖的用途?

可復(fù)用,減少重復(fù)語(yǔ)句書(shū)寫(xiě);類(lèi)似程序中函數(shù)的作用。 比如聯(lián)表查詢(xún)語(yǔ)句. 組合成視圖之后,簡(jiǎn)化了不要太多.

邏輯更清晰,屏蔽查詢(xún)細(xì)節(jié),關(guān)注數(shù)據(jù)返回;

注意點(diǎn)

視圖不能添加索引,也不能有關(guān)聯(lián)的觸發(fā)器或者默認(rèn)值

抓住視圖并沒(méi)有存儲(chǔ)數(shù)據(jù), 對(duì)視圖的操作就是映射到對(duì)基表的操作, 視圖可以簡(jiǎn)單理解為基表的一個(gè)簡(jiǎn)化對(duì)外顯示。視圖操作映射到基表, 基表操作也同樣會(huì)影響視圖. (關(guān)鍵就在于視圖沒(méi)有單獨(dú)存儲(chǔ)數(shù)據(jù))

還有另外一種視圖, 叫做物化視圖, 這種視圖和普通視圖不太一樣的是. 物化視圖是存儲(chǔ)數(shù)據(jù)的, 而且物化視圖數(shù)據(jù)的訪(fǎng)問(wèn)不是從基表, 而是直接從物化視圖中讀取數(shù)據(jù)的

物化視圖(Materialized Views,以下簡(jiǎn)稱(chēng) MV)是一種特殊的視圖,它的數(shù)據(jù)會(huì)持久化。那么在查詢(xún) MV 時(shí),并不會(huì)去訪(fǎng)問(wèn)基表,而是直接從 MV 里讀數(shù)據(jù)。(可做了解)

觸發(fā)器

什么是觸發(fā)器?

個(gè)人理解: 觸發(fā)器就是一個(gè)條件觸發(fā), 事件觸發(fā). 和自動(dòng)機(jī), 狀態(tài)機(jī)有點(diǎn)相似.

有限自動(dòng)機(jī): 提前制定好條件, 以及條件滿(mǎn)足時(shí)候的執(zhí)行操作. 后面滿(mǎn)足條件就會(huì)循環(huán)不斷的自動(dòng)執(zhí)行相應(yīng)的操作. 這個(gè)就是自動(dòng)機(jī)了. (其實(shí)本質(zhì)也是一種條件觸發(fā)) 同樣觸發(fā)器也是. 就像是回調(diào)機(jī)制, 同步操作.

觸發(fā)器就是指定在特定的sql DML操作發(fā)生之時(shí)在操作之前或者之后的瞬間接近同步的執(zhí)行觸發(fā)器指定的觸發(fā)操作.

官方定義:9

觸發(fā)器(trigger)是MySQL提供給程序員和數(shù)據(jù)分析員來(lái)保證數(shù)據(jù)完整性的一種方法,它是與表 事件相關(guān)的特殊的存儲(chǔ)過(guò)程,它的執(zhí)行不是由程序調(diào)用,也不是手工啟動(dòng),而是由事件來(lái)觸發(fā),比 如當(dāng)對(duì)一個(gè)表進(jìn)行DML操作( insert , delete , update )時(shí)就會(huì)激活它執(zhí)行。

觸發(fā)器關(guān)注要素:

  • 監(jiān)控的對(duì)象: table表
  • 監(jiān)控的事件類(lèi)型: insert update delete
  • 觸發(fā)時(shí)機(jī):before after
  • 指定觸發(fā)事件: insert update delete

怎么創(chuàng)建觸發(fā)器?

create trigger trigger_name                
trigger_time monitor_trigger_event        -- 觸發(fā)時(shí)機(jī), 監(jiān)控事件
on table_name for each row                -- 監(jiān)控表
begin
     trigger_body;                        -- 正文, 觸發(fā)事件
end

NEW && OLD (數(shù)據(jù)插入后的新表 刪除后的舊表, 更新前后的新舊表)

  • insert類(lèi)型觸發(fā)器中: New 用來(lái)表達(dá)即將(before)或者已經(jīng)(after)插入的新數(shù)據(jù);
  • delete類(lèi)型觸發(fā)器中:Old用來(lái)表達(dá)將要或者已經(jīng)刪除的舊的數(shù)據(jù).
  • update類(lèi)型觸發(fā)器中: old表示原來(lái)的舊的數(shù)據(jù), new表示新的更新的數(shù)據(jù)

用法:

new.colname (新的數(shù)據(jù)的某一字段)

old.colname (舊的原來(lái)的數(shù)據(jù)的某一字段)

觸發(fā)器用途 (應(yīng)用場(chǎng)景)?

先準(zhǔn)備兩個(gè)表: 訂單表和貨物表

CREATE TABLE `order` (
	`id` INT PRIMARY KEY auto_increment,    -- 主鍵字段
	`goods_id` INT,                         -- 貨物id, 外鍵字段
	`quantity` SMALLINT COMMENT '下單數(shù)量'   -- 下單數(shù)量
);
CREATE TABLE `goods` (
	`id` INT PRIMARY KEY auto_increment,   -- goods_id 貨物主鍵字段
	`name` VARCHAR (32),                   -- 貨物名稱(chēng)
	`num` SMALLINT DEFAULT 0               -- 貨物數(shù)量
);

要求1:

每當(dāng)客戶(hù)購(gòu)買(mǎi), 下單的時(shí)候,就自動(dòng)跟新一下貨物庫(kù)存. (客戶(hù)下單, 觸發(fā)貨物庫(kù)存更新操作)

-- 創(chuàng)建觸發(fā)器
create trigger trig_order_4 -- 觸發(fā)器名稱(chēng) 
after insert -- 觸發(fā)器時(shí)機(jī), 監(jiān)控觸發(fā)事件
on `order` for each row
begin
	update goods set num = num - new.quantity where id = new.goods_id; 
    -- 觸發(fā)正文, 觸發(fā)事件
end

Test: 測(cè)試 (id=1自動(dòng)減少了2,這個(gè)是我之前創(chuàng)建的觸發(fā)器還沒(méi)有刪除, 不是出錯(cuò)了)

反正就是, 如果是插入,可以通過(guò)插入的數(shù)據(jù)new表進(jìn)行限定. 如果是刪除操作可以用old表對(duì)刪除數(shù)據(jù)進(jìn)行指定, 如果是update操作, 可以用old對(duì)更新之前的數(shù)據(jù)指定和new更新之后的數(shù)據(jù)進(jìn)行限定.

正好引入刪除觸發(fā)器 drop trigger trigger_name 刪除;

觸發(fā)器是否具有事務(wù)性?

到此這篇關(guān)于Mysql視圖和觸發(fā)器使用過(guò)程的文章就介紹到這了,更多相關(guān)MySql視圖觸發(fā)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql分頁(yè)時(shí)offset過(guò)大的Sql優(yōu)化經(jīng)驗(yàn)分享

    mysql分頁(yè)時(shí)offset過(guò)大的Sql優(yōu)化經(jīng)驗(yàn)分享

    mysql分頁(yè)是我們?cè)陂_(kāi)發(fā)經(jīng)常遇到的一個(gè)功能,最近在實(shí)現(xiàn)該功能的時(shí)候遇到一個(gè)問(wèn)題,所以這篇文章主要給大家介紹了關(guān)于mysql分頁(yè)時(shí)offset過(guò)大的Sql優(yōu)化經(jīng)驗(yàn),文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起看看吧。
    2017-08-08
  • MySQL最大連接數(shù)限制的修改步驟

    MySQL最大連接數(shù)限制的修改步驟

    針對(duì)一些訪(fǎng)問(wèn)量比較大的網(wǎng)站,Mysql默認(rèn)的最大連接數(shù)可能不夠用,需要進(jìn)行相應(yīng)的修改,下面這篇文章主要給大家介紹了關(guān)于MySQL最大連接數(shù)限制的修改步驟,需要的朋友可以參考下
    2022-07-07
  • MySQL select count(*)計(jì)數(shù)很慢優(yōu)化方案

    MySQL select count(*)計(jì)數(shù)很慢優(yōu)化方案

    這篇文章主要介紹了MySQL select count(*)計(jì)數(shù)很慢優(yōu)化方案,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • 配置MySQL與卸載MySQL實(shí)例操作

    配置MySQL與卸載MySQL實(shí)例操作

    我們主要介紹的是正確通過(guò)rpm包安裝、對(duì)MySQL進(jìn)行配置與卸載的實(shí)際操作步驟,以下就是文章的具體內(nèi)容描述,望你會(huì)有所收獲。
    2010-08-08
  • MySQL數(shù)據(jù)庫(kù)索引以及失效場(chǎng)景詳解

    MySQL數(shù)據(jù)庫(kù)索引以及失效場(chǎng)景詳解

    索引是一種數(shù)據(jù)結(jié)構(gòu),為了應(yīng)對(duì)不同的場(chǎng)景會(huì)有多種實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)索引以及失效場(chǎng)景的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • mysql 安全管理詳情

    mysql 安全管理詳情

    這篇文章主要介紹了mysql 安全管理,MySQL服務(wù)器的安全基礎(chǔ)是用戶(hù)應(yīng)該對(duì)他們需要的數(shù)據(jù)具有適當(dāng)?shù)脑L(fǎng)問(wèn)權(quán),既不能多也不能少,換句話(huà)說(shuō),用戶(hù)不能對(duì)過(guò)多的數(shù)據(jù)具有過(guò)多的訪(fǎng)問(wèn)權(quán),下面?zhèn)z看看文章詳細(xì)內(nèi)容吧
    2021-10-10
  • mysql 性能的檢查和調(diào)優(yōu)方法

    mysql 性能的檢查和調(diào)優(yōu)方法

    我一直是使用mysql這個(gè)數(shù)據(jù)庫(kù)軟件,它工作比較穩(wěn)定,效率也很高。
    2009-05-05
  • 最新評(píng)論

    凭祥市| 兰考县| 洪江市| 嘉禾县| 衡山县| 辉县市| 霍邱县| 仁寿县| 永登县| 双辽市| 米泉市| 资溪县| 威信县| 千阳县| 巴彦淖尔市| 育儿| 开阳县| 兰州市| 吐鲁番市| 灵石县| 朝阳区| 山东省| 大连市| 东明县| 清苑县| 杭州市| 淮阳县| 迁安市| 娄烦县| 紫云| 蒙阴县| 信宜市| 阿拉尔市| 关岭| 云阳县| 仪陇县| 博白县| 张掖市| 元江| 湛江市| 兴业县|