1. 程式人生 > >MySQL階段二——sql語句基礎(3)

MySQL階段二——sql語句基礎(3)

mysql

Outfile

註意:

Insert詳解

delete和update相關

視圖

01.視圖創建

02.視圖相關定義

03.視圖創建詳解

04.刪除視圖

05.視圖查詢

06.更新視圖

07.視圖的執行過程

觸發器

01.定義觸發器

02.操作觸發器

03.註意


Outfile

將檢索到的數據,保存到服務器的文件內。

通過:select * from outfile 文件地址 from XXXX;

註意:

1.可以自動創建文件,但是對已有文件不能操作。

2.生產的文件格式:默認使用制表符區分字段,用換行符區分記錄,也會使用其他方式進行區分。

Insert詳解

技術分享



1.可以不將所有的字段插入數據,

2.如果插入部分字段,可以使用set語句:insert into teacher set t_name=...,c_name=...;

3.可以一次性插入多條語句,使用括號區分,逗號分開;

4.有主鍵沖突的時候,插入不成功,可以繼續執行更新操作:insert into teacher(id,t_name,c_name) values(...) on duplicate key update t_name=””,c_name=””;

5.插入數據源可以是select語句查詢到的數據;insert into teacher(..) select * from XXX;

6.如果字段不寫,可以使用默認值;也可以強制使用default()函數或者default關鍵字使用默認值。

7.Replace:主鍵或唯一索引沖突,則替換;否則插入。

8.可以使用load data file導入數據:load data infile 文件路徑 into table tb_name;

deleteupdate相關

1.允許使用條件(刪除符合條件的數據)

允許使用limit,限制刪除的記錄數,

常見的是limit 配合order by來使用,先將 結果排序,再刪除固定數量的記錄。

3.允許連接刪除:先提供表名,再提供連接條件。

4.Truncate

a) 不會返回刪除的記錄數

b) 重新自動增長主鍵

Delete:逐行刪除

Truncate:刪除表,新建表


視圖

技術分享

01.視圖創建

Create table info_teacher(

Id int primary key auto_increment,

T_name varchar(10),

Salary decimal(10,2)

);

Create view v_teacher as select i,t_name from info_teacher;

02.視圖相關定義

視圖就是一張虛擬表,是一個存在與數據庫中的虛擬表;視圖本身沒有數據,只是通過執行相關的select語句完成獲得相應的數據。

03.視圖創建詳解

01)建立視圖

Create view <視圖名> [(<列名>,[,<列名>])]

As <子查詢>

[with check option]

With check option表示對視圖進行updateinsertdelete操作時要保證視圖的操作的行滿足視圖定義中謂詞條件(即子查詢中的條件表達式)。

組成視圖的屬性列名或者全部省略或者全部指定。在下面三種情況下必須指定視圖列名:01.某個目標列不是單純的屬性名,而是聚集函數或者列表達式;02.多表連接時選出了幾個同名列作為視圖的手段;03.需要在視圖為某個列啟用更合適的名字。

定義基本表時,為了減少數據庫的冗余數據,表中中存放基本數據,由基本數據經過各種計算派生出的數據一般是不存儲的。創建視圖也可以創建基本表中不存在的列,即創建派生列(比如avg(列名))。

視圖可以創建在單個表上,也可以建立在多個基本表上。視圖不僅可以建立在一個或者多個基本表上,也可以建立在一個或者多個已定義的視圖上,或者建立在基本表和視圖上。

04.刪除視圖

Drop view <視圖名>[cascade];

05.視圖查詢

視圖定義之後,用戶就可以像對基本表一樣對視圖進行查詢了。

視圖消解:關系型數據庫管理系統執行對視圖的查詢的時候,首先進行有效性檢查,檢查查詢中涉及的表、視圖是否存在。如果存在,則從數據字典中取出視圖的定義,吧定義中的子查詢和用戶的查詢結合起來,轉換成等價的對基本表的查詢,然後再執行修正了的查詢。

06.更新視圖

更新視圖就是對視圖進行crud操作,真正操作也會經歷視圖消解。為了防止通過視圖對數據進行更新的時候,有意無意對不屬於視圖的基本表進行操作,可以在視圖定義的時候加上With check option

07.視圖的執行過程

視圖的執行算法:mergetemptable

指的是一個視圖是在什麽時候執行,依據哪些方式執行;

Merge:合並的執行方式,每當執行的時候,先將我們視圖的sql與語句與外部查詢視圖的sql語句,混合在一起,最終執行;

Temptable:臨時表模式,每當查詢的時候,將視圖所使用的select語句生成一個結果的臨時表。再在當前的臨時表內查詢。

每當用戶創建視圖的時候,mysql默認使用一種undefined的處理算法;就是會自動在合並和臨時表內進行選擇。

觸發器

01.定義觸發器

Create trigger <觸發器名稱>

{before|after} <觸發器名> on <表名>

Referencing new|old row as <變量> /*Referencing 指出引用的變量*/

For each {row|statement}

[when <觸發條件>] <觸發動作體>

02.操作觸發器

刪除:drop trigger<觸發器名> on <表名>

查看:show create trigger name;

03.註意

如果一個觸發程序,由多條sql語句組成。

應該:1.語句組成語句塊(begin end標識);2.語句塊的語句需要獨立的語句結束符,分號。

命令行:由於觸發程序內使用分號作為語句結束符。那麽當命令行客戶端碰到分號時,就應該理解成觸發程序內子語句結束,而不是整個創建觸發器的語句結束。

應該通過修改命令行的語句結束符達到目的。

Delimiter語句可以完成設置語句結束符。

Delimiter $$

Create trigger ruxue after insert on student

For each row

Begin

Update class set stu_count=student_count+1;

Update class set cz_money=cz_money+20;

End

$$

Delimiter ;

Old:監聽事件所在表上的數據,在事件發生之前時的數據;

New:監聽表上,事件發生之後,新處理完畢的數據。

事件是insert時:不能使用old;事件為delete:不能使用new

本文出自 “秦斌的博客” 博客,謝絕轉載!

MySQL階段二——sql語句基礎(3)