《MySQL由淺至深》PPT課件.ppt_第1頁
《MySQL由淺至深》PPT課件.ppt_第2頁
《MySQL由淺至深》PPT課件.ppt_第3頁
《MySQL由淺至深》PPT課件.ppt_第4頁
《MySQL由淺至深》PPT課件.ppt_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、,MySQL教程,高級(jí)2第7章,如果你想做最好的,或者不做!2020/8/7,MySQL視圖,ALTER VIEW語法CREATE VIEW語法DROP VIEW語法SHOW CREATE VIEW語法,它在MySQL服務(wù)器版本5.1中提供了視圖功能(包括可更新視圖)。本章討論以下主題:使用CREATE VIEW或ALTER VIEW創(chuàng)建或更改視圖。使用DROP VIEW銷毀視圖。使用SHOW CREATE VIEW顯示視圖元數(shù)據(jù)。2020年8月7日,MySQL-createview語法,Create OR REPLACE算法=undefined | merge | template view

2、 view _ name(column _ list)as select _ statement with cascaded | local check選項(xiàng)此語句可以創(chuàng)建一個(gè)新視圖,如果給定了OR REPLACE子句,它還可以替換現(xiàn)有視圖。Select語句是一個(gè)select語句,它給出了視圖的定義。該語句可以從基表或其他視圖中選擇。此語句要求對(duì)視圖擁有CREATE VIEW權(quán)限,并對(duì)select語句選擇的每一列擁有一些權(quán)限。SELECT語句中其他地方使用的列必須具有SELECT權(quán)限。如果有OR REPLACE子句,您必須對(duì)該視圖擁有DROP權(quán)限。2020年8月7日,MySQL創(chuàng)建了一個(gè)視圖,它

3、屬于數(shù)據(jù)庫。默認(rèn)情況下,在當(dāng)前數(shù)據(jù)庫中創(chuàng)建新視圖。要在給定的數(shù)據(jù)庫中顯式創(chuàng)建視圖,名稱應(yīng)該指定為db_name.view_name。mysql創(chuàng)建視圖測試。表和視圖在數(shù)據(jù)庫中共享相同的命名空間,因此數(shù)據(jù)庫不能包含同名的表和視圖。視圖必須有唯一的列名,并且不能重復(fù),就像基表一樣。默認(rèn)情況下,由SELECT語句檢索的列名用作視圖列名。要為視圖列定義顯式名稱,請(qǐng)使用可選的column_list子句列出用逗號(hào)分隔的id。column_list中的名稱數(shù)必須等于SELECT語句檢索的列數(shù)。SELECT語句檢索的列可以是對(duì)表列的簡單引用。它也可以是使用函數(shù)、常數(shù)值、運(yùn)算符等的表達(dá)式。SELECT語句中的非

4、限定表或視圖將根據(jù)默認(rèn)數(shù)據(jù)庫進(jìn)行解釋。通過用適當(dāng)?shù)臄?shù)據(jù)庫名稱限定表或視圖名稱,視圖可以引用表或其他數(shù)據(jù)庫中的視圖。多種SELECT語句可用于創(chuàng)建視圖。視圖可以引用基表或其他視圖。它可以使用union、UNION和子查詢。選擇甚至不需要引用任何表。在以下示例中,定義了從另一個(gè)表中選擇兩列的視圖,并給出了根據(jù)這些列計(jì)算的表達(dá)式:MySQl create table(qty int,price int);mysql插入測試值(3,50);mysql創(chuàng)建視圖v AS選擇數(shù)量、價(jià)格、數(shù)量*價(jià)格AS值從t;MySQL SELECT * FROM v;2020年8月7日,MySQL視圖的定義,視圖定義受以下

5、限制:SELECT語句不能在FROM子句中包含子查詢。SELECT語句不能引用系統(tǒng)或用戶變量。SELECT語句不能引用預(yù)處理語句參數(shù)。在存儲(chǔ)的子程序中,定義不能被引用的子程序參數(shù)或局部變量。定義中引用的表或視圖必須存在。但是,創(chuàng)建視圖后,定義引用的表或視圖可以被丟棄。要檢查此類問題的視圖定義,請(qǐng)使用CHECK TABLE語句。定義中不能引用臨時(shí)表,也不能創(chuàng)建臨時(shí)視圖。視圖定義中命名的表必須已經(jīng)存在。您不能將觸發(fā)器與視圖相關(guān)聯(lián)。2020/8/7,MySQL-WITH CHECK OPTION,對(duì)于可更新的視圖,可以使用WITH CHECK OPTION子句來防止插入或更新行,除非select _

6、語句中對(duì)行起作用的WHERE子句為真。在關(guān)于可更新視圖的WITH CHECK OPTION子句中,當(dāng)視圖根據(jù)另一個(gè)視圖定義時(shí),LOCAL和CASCADED關(guān)鍵字決定了檢查測試的范圍。LOCAL關(guān)鍵字將檢查選項(xiàng)限制為僅在已定義的視圖上工作。級(jí)聯(lián)將檢查要評(píng)估的基表。如果沒有給定關(guān)鍵字,默認(rèn)值為級(jí)聯(lián)。請(qǐng)考慮以下表和視圖集的定義:MySQL CREATE TABLE t1(a INT);mysql創(chuàng)建視圖v1作為選擇*從t1開始,其中創(chuàng)建視圖v2作為選擇*從v1開始,其中a0帶有本地檢查選項(xiàng);mysql創(chuàng)建視圖v3 AS SELECT * FROM v1,其中a0帶有級(jí)聯(lián)檢查選項(xiàng);注意:這里,視圖v2

7、和v3是根據(jù)另一個(gè)視圖v1定義的。V2有本地檢查選項(xiàng),所以只有插件將被測試v2檢查。V3有級(jí)聯(lián)檢查選項(xiàng),所以它不僅會(huì)測試自己的檢查,還會(huì)測試基本視圖的檢查。在下面的語句中,介紹了這些差異:mysql INSERT INTO v3值(2);錯(cuò)誤1369 (hy000) :檢查選項(xiàng)未通過測試。v3,2020年8月7日,MySQl-本地和級(jí)聯(lián),其中視圖v2和v3是根據(jù)另一個(gè)視圖v1定義的。V2有本地檢查選項(xiàng),所以只有插件將被測試v2檢查。V3有級(jí)聯(lián)檢查選項(xiàng),所以它不僅會(huì)測試自己的檢查,還會(huì)測試基本視圖的檢查。在下面的語句中,介紹了這些差異:mysql INSERT INTO v3值(3);錯(cuò)誤136

8、9 (hy000) :檢查選項(xiàng)未通過測試,v3,注意:可更新視圖的with限制可能會(huì)影響可更新系統(tǒng)變量。2020年8月7日,MySQL-alter view語法,alter algorithm=undefined | merge | template view _ name(column _ list)as select _ statement with cascaded | local check選項(xiàng)此語句用于更改現(xiàn)有視圖的定義。它的語法類似于創(chuàng)建視圖。mysql將視圖v3更改為選擇*從t1開始,其中a 1帶有本地檢查選項(xiàng);注意:CREATE VIEW和DROP權(quán)限還要求對(duì)SELECT語句中

9、引用的每一列都有一些權(quán)限。2020年8月7日/8月7日,MySQL視圖相關(guān)性,一些視圖是可更新的。也就是說,它們可以在諸如UPDATE、DELETE或INSERT這樣的語句中用來更新基表的內(nèi)容。對(duì)于可更新視圖,視圖中的行和基表中的行之間必須存在一對(duì)一的關(guān)系。還有其他特定的結(jié)構(gòu),使得視圖不可更新。更具體地說,如果視圖包含以下任何結(jié)構(gòu),則它是不可更新的:聚合函數(shù)(求和)、最小、最大、計(jì)數(shù)等。)。UNION HAVING UNION或UNION ALL的DISTINCT GROUP位于選擇列表的聯(lián)接從子句的子查詢中,不可更新視圖的WHERE子句中的子查詢引用從子句中的表。mysql將視圖v3更改為從

10、t1開始的選擇計(jì)數(shù)(*),其中a 1帶有本地檢查選項(xiàng);錯(cuò)誤1368 (hy000) :不可更新視圖測試上的檢查選項(xiàng)。v3,2020/8/7,MySQL-dropview語法,如果存在dropview,則為view _ name,view _ name.restricted | cascade dropview可以刪除一個(gè)或多個(gè)視圖。您必須對(duì)每個(gè)視圖擁有DROP權(quán)限。您可以使用關(guān)鍵字IF EXISTS來防止由不存在的視圖引起的錯(cuò)誤。給定這個(gè)子句,將為每個(gè)不存在的視圖生成一個(gè)注釋。2020年8月7日/2020年8月7日,MySQL- SHOW CREATE VIEW語法,SHOW CREATE V

11、IEW _ name此語句給出了一個(gè)創(chuàng)建視圖的CREATE VIEw語句。MySQL SHow CREATE VIEw v;mysql SHOW CREATE VIEW vG,2020/8/7,MySQL分區(qū),分區(qū)類型分區(qū)管理,2020/8/7,MySQL分區(qū)概述,使用的SQL語言獨(dú)立于圖表、表格、行或列下的任何數(shù)據(jù)結(jié)構(gòu)或介質(zhì)。然而,大多數(shù)高級(jí)數(shù)據(jù)庫管理系統(tǒng)已經(jīng)開發(fā)了一些方法來根據(jù)文件系統(tǒng)、硬件或兩者來確定用于存儲(chǔ)特定數(shù)據(jù)塊的物理位置。在MySQL中,InnoDB存儲(chǔ)引擎長期以來一直支持表空間的概念。分區(qū)通過允許單個(gè)表的多個(gè)部分根據(jù)可以設(shè)置為任意大小的規(guī)則分布在文件系統(tǒng)中,將這一概念向前推進(jìn)了

12、一步。事實(shí)上,表的不同部分作為單獨(dú)的表存儲(chǔ)在不同的位置。用戶選擇的實(shí)現(xiàn)數(shù)據(jù)劃分的規(guī)則稱為劃分函數(shù),它可以是MySQL中的模,也可以是簡單的匹配一個(gè)連續(xù)的數(shù)值區(qū)間或數(shù)值列表,或者是一個(gè)內(nèi)部HASH函數(shù)或一個(gè)線性HASH函數(shù)。該函數(shù)根據(jù)用戶指定的分區(qū)類型進(jìn)行選擇,并將用戶提供的表達(dá)式的值作為參數(shù)。表達(dá)式可以是整數(shù)列值,也可以是作用于一個(gè)或多個(gè)列值并返回整數(shù)的函數(shù)。此表達(dá)式的值被傳遞給分區(qū)函數(shù),該函數(shù)返回一個(gè)序列號(hào),指示特定記錄應(yīng)該保存在哪個(gè)分區(qū)中。該函數(shù)不能是常數(shù)或任意數(shù)。它不能包含任何查詢,但它實(shí)際上可以使用MySQL中可用的任何SQL表達(dá)式,只要它返回一個(gè)小于MAXVALUE(最大可能正整數(shù))

13、的正值。您可以通過使用SHOW VARIABLES命令來確定MySQL是否支持分區(qū),例如:MySQL show variables像% partition%一樣;2020/8/7,MySQL- PARTITION,要為分區(qū)表配置特殊的存儲(chǔ)引擎,您必須并且只能使用存儲(chǔ)引擎選項(xiàng),就像為非分區(qū)表配置存儲(chǔ)引擎一樣。但是,必須記住,必須在CREATE TABLE語句中使用的任何其他分區(qū)選項(xiàng)之前列出STORAGE(和其他表選項(xiàng))。以下示例顯示了如何創(chuàng)建一個(gè)表,該表被hash分成6個(gè)分區(qū),并使用InnoDB存儲(chǔ)引擎:MySQL創(chuàng)建表T2 (id int,amount decimal (7,2),tr _ d

14、ate)引擎=innodb分區(qū)被HASH(月(tr _ date)6個(gè)分區(qū);注意:分區(qū)適用于表的所有數(shù)據(jù)和索引;您不能只分區(qū)數(shù)據(jù)而不分區(qū)索引,反之亦然,并且您不能只分區(qū)表的一部分。2020/8/7,MySQL分區(qū)的優(yōu)點(diǎn),分區(qū)的一些優(yōu)點(diǎn)包括:它可以存儲(chǔ)比單個(gè)磁盤或文件系統(tǒng)分區(qū)更多的數(shù)據(jù)。對(duì)于那些已經(jīng)失去保存意義的數(shù)據(jù),通常很容易通過刪除與這些數(shù)據(jù)相關(guān)的分區(qū)來刪除這些數(shù)據(jù)。相反,在某些情況下,添加新數(shù)據(jù)的過程可以通過為這些新數(shù)據(jù)添加新分區(qū)來輕松實(shí)現(xiàn)。通常與分區(qū)相關(guān)的其他優(yōu)勢包括以下所列。MySQL分區(qū)中的這些功能還沒有實(shí)現(xiàn),但是它們?cè)谖覀兊膬?yōu)先級(jí)列表中有很高的優(yōu)先級(jí);我們希望在5.1的生產(chǎn)版本中包

15、含這些功能。有些查詢可以得到極大的優(yōu)化,主要是因?yàn)闈M足給定WHERE語句的數(shù)據(jù)只能存儲(chǔ)在一個(gè)或多個(gè)分區(qū)中,所以在搜索時(shí)不需要找到其他剩余的分區(qū)。因?yàn)榭梢栽趧?chuàng)建分區(qū)表后修改分區(qū),所以在首次配置分區(qū)方案時(shí),可以重新組織數(shù)據(jù)以提高常見查詢的效率。涉及SUM()和COUNT()等聚合函數(shù)的查詢可以很容易地并行處理。該查詢的一個(gè)簡單示例是“選擇銷售人員標(biāo)識(shí),按銷售人員標(biāo)識(shí)從銷售組中將(訂單)計(jì)數(shù)為訂單總額”。通過“并行”,這意味著查詢可以同時(shí)在每個(gè)分區(qū)上執(zhí)行,并且最終結(jié)果只需要通過匯總所有分區(qū)的結(jié)果來獲得。通過將數(shù)據(jù)查詢分布在多個(gè)磁盤上,我們可以獲得更大的查詢吞吐量。2020年8月7日/2020年8月7日,MySQL分區(qū)類型,RANGE分區(qū):基于給定連續(xù)間隔的列值,將多行分配給該分區(qū)。列表分區(qū):類似于按范圍分區(qū),區(qū)別在于列表分區(qū)是根據(jù)列值與離散值集中的值的匹配來選擇的。HASH partition:根據(jù)用戶定義表達(dá)式的返回值選擇的分區(qū),它是使用要插入到表中的這些行的列值來計(jì)算的。這個(gè)函數(shù)可以包含任何在MySQL中有效的表達(dá)式,并產(chǎn)生一個(gè)非負(fù)整數(shù)值。密鑰分區(qū):與哈希分區(qū)相似,不同之處在于密鑰分區(qū)只支持計(jì)算一列或多列,MySQL服務(wù)器提供自己的哈希函數(shù)。一列或多列必須包含整數(shù)值。注意:無論使用什么類型的分區(qū),當(dāng)從0開始創(chuàng)建和記錄分區(qū)時(shí),分區(qū)總是自動(dòng)按順序編號(hào)。記住這一點(diǎn)非常重

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論