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...