MySQL之內置功能

2021-08-19 23:29:46 字數 3455 閱讀 2294

1>檢視

檢視是乙個虛擬表(非真實存在),其本質是【根據sql語句獲取動態的資料集,並為其命名】,

使用者使用時只需使用【名稱】即可獲取結果集,可以將該結果集當做表來使用。

檢視儲存在硬碟上跟其他表不同,它值存放資料結構,而不儲存資料,很顯然,檢視是乙個

類似『快捷鍵』的東西,每次執行檢視查詢,其實也就是重新執行一遍檢視(語句),從真正的

表中獲取資料,所以,它本身並不存放資料。

實際當中用的很少,因為若過分依賴檢視這種強耦合關係(要根據檢視sql檢視其它表的資料),

會增加擴充套件資料庫的難度。

增:create view 檢視名稱 as  sql語句

改:我們不應該修改檢視中的記錄,而且在涉及多個表的情況下是根本無法修改檢視中的記錄的

刪:drop view 檢視名稱

查:查詢語法類似sql語句的查詢語法,如select * from 檢視名稱

2>觸發器

使用觸發器可以定製使用者對錶進行【增、刪、改】操作時前後的行為,注意:沒有查詢

增:如下, 在每次插入資料之前觸發這段sql的執行

create triggertri_before_insert_tb1before insert ontb1for each row

begin

...end

建立觸發器例項

delimiter //

create trigger tri_after_insert_cmd after insert on cmd for each row

begin

if new.success = 'no' then #等值判斷只有乙個等號

insert into errlog(err_cmd, err_time) values(new.cmd, new.sub_time) ; #必須加分號

end if ; #必須加分號

end//

delimiter ;

因語句裡面有多行帶分號,分號是sql的結束符號,所以再實體觸發器的首尾加上delimiter標識,後面可以用

//或者其他符號作為開始和結束符號,結尾必須用 delimiter ;收尾,

new表示即將插入的資料行,old表示即將刪除的資料行。

刪:drop trigger tri_after_insert_cmd;

查:觸發器是被動觸發的,無法直接查詢。

3>事物

事務用於將某些操作的多個sql作為原子性操作,即一旦有某乙個出現錯誤,即刻回滾

到原來的狀態,從而保證資料庫資料完整性。

設想銀行轉賬的例子:1>賬戶轉出1000,2>對端賬戶收取1000,這兩步就應該作為原子性操作,

若有任何1步失敗,則所有步驟均失敗(回滾操作或者不執行),就不會出現類似「若有網路延遲問題,

導致a賬戶轉出了1000,即db.a減了1000,而db.b賬戶未增加1000」的問題。

update bank set balance=500 where name='huang';# 支付500元

update bank set balance=1200 where name='qing';# 平台收取200元

update bank set balance=1300 where name='long';# 賣家收取300元

注意這個commit,在commit之前,有個回滾機制,即當sql語句執行出現問題,可以rollback;回滾到

事物內所有sql執行之前的狀態,一旦commit之後,資料就不能回滾了,

事物跟觸發器結合使用,如下,觸發器中加入回滾和提交機制,讓程式根據sql執行結果自動調取。

4>儲存過程

儲存過程包含了一系列可執行的sql語句,儲存過程存放於mysql中,通過呼叫它的名字可以執行其內部的一堆sql

先說下程式與資料庫結合的三種方式

方式一:mysql這邊負責寫儲存過程,應用程式開發這邊只需調介面(儲存過程),對於應用程式開發來說,

很方便,開發效率高,但是後期若要改動,可能需要跟dba做大量的溝通,資料庫專職管理人員才會做修改,

所以,擴充套件難,若部門之間溝通協調做的極好,可以用這種方式,

方式二:鑑於方式一有一種部門「依賴關係」,很明顯,跟我們現在的『敏捷』是不太匹配的,所以,應用

開發這邊自己編寫sql語句,長長的一大串的sql語句,缺點很明顯,這種sql執行肯定沒儲存過程快,而且

應用程式編寫sql肯定沒專業的dba這麼專精,導致會耗費一部分sql編寫時間,

方式三:鑑於方式二的缺點,又優化了下,成了方式三,應用程式這邊依然自己寫sql,不過是根據orm模型

自己編寫類去實現,簡單來說就是比方式二在寫sql方面更加『輕鬆』,但是執行效率是最慢的,因為,基於這

個orm模型寫的『類』或者『物件』還得轉換成真正的,可以用於執行的sql,中間還多了一部『轉換』過程,

所以執行速度最慢,但是,但是,方式三恰恰就是現今使用最廣的方法。

刪:drop procedure proc_name;

5>函式

JS之內置物件

date日期物件 var date new date var date2 new date 2019,07,17 var date3 new date dct 1,2012 date.getdate 獲取日期,setdate 為設定日期 date.getsetfullyear 返回年份 date.g...

python之內置函式

非空即真,非0即真 記住這句話可以讓你少寫好多 l asdfgwert3r 1 sorted l 排序 字串可以直接使用sorted排序 2 all 如果list裡面都為真的情況返回為 true all 1 2,3 4 print true all 1 2,3 0 print false all 1...

python之內置函式

它將兩個 非複數 數字作為實參,並在執行整數除法時返回一對商和餘數。對於混合運算元型別,適用雙目算術運算子的規則。對於整數,結果和 a b,a b 一致,分別對應取整數和取餘數 對於浮點數,結果是 q,a b q 通常是 math.floor a b 但可能會比 1 小。如 將153拆解 a,b d...