SQL速查手冊資料_第1頁
SQL速查手冊資料_第2頁
SQL速查手冊資料_第3頁
SQL速查手冊資料_第4頁
SQL速查手冊資料_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

SQL手冊

本文針對關(guān)系型數(shù)據(jù)庫的一般語法。限于篇幅,本文側(cè)重說明用法,不會展開

講解特性、原理。本文內(nèi)容包括基本概念、增刪改查、子查詢、連接和組合、

函數(shù)、排序和分組、數(shù)據(jù)定義、事務(wù)處理、權(quán)限管理等等。

一、基本概念數(shù)據(jù)庫術(shù)語

?數(shù)據(jù)庫(database):保存有組織的數(shù)據(jù)的容器(通常是一個文件或一組

文件)。

■數(shù)據(jù)表(table):某種特定類型數(shù)據(jù)的結(jié)構(gòu)化清單。

-模式(schema):關(guān)于數(shù)據(jù)庫和表的布局及特性的信息。模式定義了數(shù)據(jù)

在表中如何存儲,包含存儲什么樣的數(shù)據(jù),數(shù)據(jù)如何分解,各部分信息如

何命名等信息。數(shù)據(jù)庫和表都有模式。

■列(column):表中的一個字段。所有表都是由一個或多個列組成的。

■行(row):表中的一個記錄。

?主鍵(primarykey):一列(或一組列),其值能夠唯一標(biāo)識表中每一

行。

SQL語法

SQL(StructuredQueryLanguage),標(biāo)準(zhǔn)SQL由ANSI標(biāo)準(zhǔn)委員會管理,從而

稱為ANSISQL。各個DBMS都有自己的實現(xiàn),如PL/SQL、Transact-SQL等。

SQL語法結(jié)構(gòu)

SQL語法結(jié)構(gòu)包括:

■子句?是語句和查詢的組成成分。(在某些情況下,這些都是可選的。)

■表達(dá)式?可以產(chǎn)生任何標(biāo)量值,或由列和行的數(shù)據(jù)庫表

■謂詞?給需要評估的SQL三值邏輯(3VL)(true/false/unknown)或布

爾直值指定條件.并限制語句和查詢的效果.或改變程序流程c

?查詢?基于特定條件檢索數(shù)據(jù)。這是SQL的一個重要蛆成部分。

?語句-可以持久地影響綱要和數(shù)據(jù),也可以控制數(shù)據(jù)庫事務(wù)、程序流程、

連接、會話或診斷。

SQL語法要點

"SQL語句不區(qū)分大小寫,但是數(shù)據(jù)庫表名、列名和值是否區(qū)分,依賴于具

體的DBMS以及配置。

例如:SELECT與select、Select是相同的。

-多條SQL語句必須以分號(;)分隔。

-處理SQL語句時,所有空格都被忽略。SQL語句可以寫成一行,也可以

分寫為多行。

-一行SQL語句

UPDATEuserSETusername='robot*,password='robot*WHEREusername='root,;

-多行SQL語句

UPDATEuser

SETusername=,robot*,password='robot'

WHEREusername='root,;

?SQL支持三種注釋

##注釋1

一注釋2

/*注釋3*/

SQL分類

數(shù)據(jù)定義語言(DDL)

數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL)是SQL語言集中負(fù)責(zé)數(shù)據(jù)

結(jié)構(gòu)定義與數(shù)據(jù)庫對象定義的語言。DDL的主要功能是定義數(shù)據(jù)庫對象。DDL

的核心指令是CREATE、ALTER、DROP。

數(shù)據(jù)操縱語言(DML)

數(shù)據(jù)操縱語言(DataManipulationLanguage,DML)是用于數(shù)據(jù)庫操作,

對數(shù)據(jù)庫其中的對象和數(shù)據(jù)運(yùn)行訪問工作的編程語句。DML的主要功能是

訪問數(shù)據(jù),因此其語法都是以讀寫數(shù)據(jù)庫為主。

DML的核心指令是INSERT.UPDATE.DELETE.SELECTo這四個指

令合稱CRUD(Create,Read,Update,Delete),即增刪改查。

事務(wù)控制語言(TCL)

事務(wù)控制語言(TransactionControlLanguage,TCL)用于管理數(shù)據(jù)庫中的事

務(wù)。這些用于管理由DML語句所做的更改。它還允許將語句分組為邏輯事務(wù)。

TCL的核心指令是COMMIT、ROLLBACKo

數(shù)據(jù)控制語言(DCL)

數(shù)據(jù)控制語言(DataControlLanguage,DCL)是一種可對數(shù)據(jù)訪問權(quán)進(jìn)行控

制的指令,它可以控制特定用戶賬戶對數(shù)據(jù)表、查看表、預(yù)存程序、用戶自定

義函數(shù)等數(shù)據(jù)庫對象的控制權(quán)。DCL的核心指令是GRANT、REVOKE。DCL以控

制用戶的訪問權(quán)限為主,因此其指令作法并不復(fù)雜,可利用DCL控制的權(quán)限

有:CONNECT>SELECT>INSERT.UPDATE>DELETE、EXECUTE,USAGE.

REFERENCESo根據(jù)不同的DBMS以及不同的安全性實體,其支持的權(quán)限控制也

有所不同。(以下為DML語句用法)

二、增刪改查

增刪改查,又稱為CRUD,數(shù)據(jù)庫基本操作中的基本操作。

插入數(shù)據(jù)

■INSERTINTO語句用于向表中插入新記錄。

插入完整的行

INSERTINTOuser

VALUES(10,'root','root','xxxx@163.com');

插入行的一部分

INSERTINTOuser(username,password,email)

VALUES('admin','admin','xxxx@163.com');

插入查詢出來的數(shù)據(jù)

INSERTINTOuser(username)

SELECTname

FROMaccount;

更新數(shù)據(jù)

■UPDATE語句用于更新表中的記錄。

UPDATEuser

SETusername=,robot',password』robot'

WHEREusername='root,;

刪除數(shù)據(jù)

'DELETE語句用于刪除表中的記錄。

'TRUNCATETABLE可以清空表,也就是刪除所有行。

刪除表中的指定數(shù)據(jù)

DELETEFROMuser

WHEREusername='robot,;

清空表中的數(shù)據(jù)

TRUNCATETABLEuser;

查詢數(shù)據(jù)

?SELECT語句用于從數(shù)據(jù)庫中查詢數(shù)據(jù)。

■DISTINCT用于唯一不同的值。它作用于所有列,也就是說所有列的值都相同才

算相同。關(guān)注公眾號:Java后端編程,回復(fù):Java,獲取最新資料。

■LIMIT限制返回的行數(shù)??梢杂袃蓚€參數(shù),第一個參數(shù)為起始行,從0開始;

第二個參數(shù)為返回的總行數(shù)。

oASC:升序(默認(rèn))

oDESC:降序返回

查詢單列

SELECTprod_name

FROMproducts;

查詢多列

SELECTprod_id,prod_name,prod_price

FROMproducts;

查詢所有列

ELECT*

FROMproducts;

查詢不同的值

SELECTDISTINCT

vendidFROMproducts;

限制查詢結(jié)果

—返回前5行

SELECT*FROMmytableLIMIT5;

SELECT*FROMmytableLIMIT0,5;

-返回第3~5行

SELECT*FROMmytableLIMIT2,3;

三、子查詢

了查詢是嵌套在較大查詢中的SQL查詢。了查詢也稱為內(nèi)部查詢或內(nèi)部選擇,而

包含子查詢的語句也稱為外部查詢或外部選擇。

子查詢可以嵌套在SELECT,INSERT,UPDATE或DELETE語句內(nèi)或

另一個子查詢中。

子查詢通常會在另一個SELECT語句的WHERE子句中添加。

您可以使用比較運(yùn)算符,如>,<,或=o比較運(yùn)算符也可以是多行運(yùn)算

符,如IN,ANY或ALLo

子查詢必須被圓括號()括起來。

內(nèi)部查詢首先在其父查詢之前執(zhí)行,以便可以將內(nèi)部查詢的結(jié)果傳遞給外

部查詢。執(zhí)行過程可以參考下圖:

子查詢的子查詢

SELECTcust_name,cust_contact

FROMcustomers

WHEREcust_idIN(SELECTcust_id

FROMorders

WHEREordernumIN(SELECTordernum

FROMorderitems

WHEREprod_id='RGAN01'));

WHERE

WHERE子句用于過濾記錄,即縮小訪問數(shù)據(jù)的范圍。

WHERE后跟一個返回true或false的條件。

WHERE可以與SELECT,UPDATE和DELETE一起使用。

可以在WHERE子句中使用的操作符

SELECT語句中的WHERE子句

SELECT*FROMCustomers

WHEREcusr_name=*KidsPlace*;

UPDATE語句中的WHERE子句

UPDATECustomers

SETcustname='JackJones'

WHEREcust_name='KidsPlace*;

DELETE語句中的WHERE子句

DELETEFROMCustomers

WHEREcust_name='KidsPlace*;

IN和BETWEEN

IN操作符在WHERE子句中使用,作用是在指定的幾個特定值中任選一

個值。

BETWEEN操作符在WHERE子句中使用,作用是選取介于某個范圍內(nèi)

的值。

IN示例

SELECT*

FROMproducts

WHEREvendidIN('DLLO1','BRSO1');

BETWEEN示例

SELECT*

FROMproducts

WHEREprod_priceBETWEEN3AND5;

AND、OR、NOT

AND、OR、NOT是用于對過濾條件的邏輯處理指令。

AND優(yōu)先級高于OR,為了明確處理順序,可以使用()。

AND操作符表示左右條件都要滿足.

OR操作符表示左右條件滿足任意一個即可。

NOT操作符用于否定一個條件。

AND示例

SELECTprod_id,prod_name,prod_price

FROMproducts

WHEREvend_id='DLLO1'ANDprod_price<=4;

OR示例

SELECTprodid,prodname,prod_price

FROMproducts

WHEREvendid='DLL01'ORvendid='BRSO1';

NOT示例

SELECT*

FROMproducts

WHEREprodpriceNOTBETWEEN3AND5;

LIKE

■LIKE操作符在WHERE子句中使用,作用是確定字符串是否匹配模式。

-只有字段是文本值時才使用LIKEo

-LIKE支持兩個通配符匹配選項:%和

■不要濫用通配符,通配符位于開頭處匹酉盛非常慢。

■%表示任何字符出現(xiàn)任意次數(shù)。

■_表示任何字符出現(xiàn)一次。

%示例

SELECTprod_id,prod_name,prod_price

FROMproducts

WHEREprodnameLIKE*%beanbag%';

_示例

SELECTprodid,prodname,prod_price

FROMproducts

WHEREprodnameLIKEinchtoddybear,;

四、連接和組合

連接(JOIN)

-如果一個JOIN至少有一個公共字段并且它們之間存在關(guān)系,則該JOIN可以在

兩個或多個表上工作。

-連接用于連接多個表,使用JOIN關(guān)鍵字,并且條件語句使用ON而不是

WHEREo

■JOIN保持基表(結(jié)構(gòu)和數(shù)據(jù))不變。

■JOIN有兩種連接類型:內(nèi)連接和外連接。

■內(nèi)連接又稱等值連接,使用INNERJOIN關(guān)鍵字。在沒有條件語句的情況下返回

笛卡爾積。

o自連接可以看成內(nèi)連接的一種,只是連接的表是自身而已。

-自然連接是把同名列通過=測試連接起來的,同名列可以有多個。

?內(nèi)連接VS自然連接

0內(nèi)連接提供連接的列,而自然連接自動連接所有同名列。

■外連接返回一個表中的所有行,并且僅返回來自次表中滿足連接條件的那些行,

即兩個表中的列是相等的。外連接分為左外連接、右外連接、全外連接(Mysql

不支持)。

o左外連接就是保留左表沒有關(guān)聯(lián)的行。

o右外連接就是保留右表沒有關(guān)聯(lián)的行。

■連接VS子查詢

0連接可以替換子查詢,并且比子查詢的效率一般會更快。

內(nèi)連接(INNERJOIN)

SELECTvend_name,prod_name,prod_price

FROMvendorsINNERJOINproducts

ONvendors.vend_id=products.vend_id;

自連接

SELECTcl.cust_id,cl.custname,cl.cust_contact

FROMcustomerscl,customersc2

WHEREcl.custname=c2.custname

ANDc2.custcontact=*JimJones';

自然連接(NATURALJOIN)

SELECT*

FROMProducts

NATURALJOINCustomers;

左連接(LEFTJOIN)

SELECTcustomers.cust_id,orders.oider_num

FROMcustomersLEFTJOINorders

ONcustomers.cust_id=orders.cust_id;

右連接(RIGHTJOIN)

SELECTcustomers,custid,orders,ordernum

FROMcustomersRIGHTJOINorders

ONcustomers.cust_id=orders.cust_id;

組合(UNION)

■UNION運(yùn)算符將兩個或更多查詢的結(jié)果組合起來,并生成一個結(jié)果集,其

中包含來自UNION中參與查詢的提取行。

?UNION基本規(guī)則

o所有查詢的列數(shù)和列順序必須相同。

o每個查詢中涉及表的列的數(shù)據(jù)類型必須相同或兼容。

o通常返回的列名取自第一個查詢。

■默認(rèn)會去除相同行,如果需要保留相同行,使用UNIONALLo

-只能包含一個ORDERBY子句,并且必須位于語句的最后。

,應(yīng)用場景

O在一個查詢中從不同的表返回結(jié)構(gòu)數(shù)據(jù)。

0對一個表執(zhí)行多個查詢,按一個查詢返回數(shù)據(jù)。

組合查詢

SELECTcustname,custcontact,custemail

FROMcustomers

WHEREcuststateIN('IL','IN','MI')

UNION

SELECTcustname,custcontact,custemail

FROMcustomers

WHEREcust_name=*Fun4AlT;

JOINvsUNION

?JOINvsUNION

oJOIN中連接表的列可能不同,但在UNION中,所有查詢的列數(shù)和列順

序必須相同。

oUNION將查詢之后的行放在一起(垂直放置),但JOIN將查詢之后的

列放在一起(水平放置),即它構(gòu)成一個笛卡爾積。

五、函數(shù)

□注意:不同數(shù)據(jù)庫的函數(shù)往往各不相同,因此不可移植。本節(jié)主要以Mysql的

函數(shù)為例。

文本處理

其中,SOUNDEX0可以將一個字符串轉(zhuǎn)換為描述其語音表示的字母數(shù)字

模式。

SELECT*

FROMmytable

WHERESOUNDEX(coll)-SOUNDEX(fapp1e)

日期和時間處理

■日期格式:YYYY-MM-DD

-時間格式:HH:MM:SS

mysql>SELECTN0W();

2018-4-1420:25:11

數(shù)值處理

匯總

AVG()會忽略NULL行。

使用DISTINCT可以讓匯總函數(shù)值匯總不同的值。

SELECTAVG(DISTINCTcoll)ASavgcol

FROMmytable

六、排序和分組

ORDERBY

■ORDERBY用于對結(jié)果集進(jìn)行排序。

oASC:升序(默認(rèn))

oDESC:降序

■可以按多個列進(jìn)行排序,并且為每個列指定不同的排序方式

指定多個列的排序方向

SELECT*FROMproducts

ORDERBYprodpriceDESC,prodnameASC;

GROUPBY

GROUPBY子句將記錄分組到匯總行中。

GROUPBY為每個組返回一個記錄。

GROUPBY通常還涉及聚合:COUNT,MAX,SUM,AVG等。

GROUPBY可以按一列或多列進(jìn)行分組。

GROUPBY按分組字段進(jìn)行排序后,ORDERBY可以以匯總字段來進(jìn)行

排序。

分組

SELECTcust_name,COUNT(custaddress)ASaddrnum

FROMCustomersGROUPBYcust_name;

分組后排序

SELECTcust_name,COUNT(cust_address)ASaddr_num

FROMCustomersGROUPBYcustname

ORDERBYcust_nameDESC;

HAVING

HAVING用于對匯總的GROUPBY結(jié)果進(jìn)行過濾。

HAVING要求存在一個GROUPBY子句。

WHERE和HAVING可以在相同的查詢中。

-HAVINGvsWHERE

oWHERE和HAVING都是用于過濾。

oHAVING適用于匯總的組記錄;而WHERE適用于單個記錄。

使用WHERE和HAVING過濾數(shù)據(jù)

SELECTcust_name,COUNT(*)ASnum

FROMCustomers

WHEREcust_emailISNOTNULL

GROUPBYcust_name

HAVINGCOUNT(*)>=1;

(以下為DDL語句用法)

七、數(shù)據(jù)定義

DDL的主要功能是定義數(shù)據(jù)庫對象(如:數(shù)據(jù)庫、數(shù)據(jù)表、視圖、索引等)

數(shù)據(jù)庫(DATABASE)

創(chuàng)建數(shù)據(jù)庫

CREATEDATABASEtest;

刪除數(shù)據(jù)庫

DROPDATABASEtest;

選擇數(shù)據(jù)庫

USEtest;

數(shù)據(jù)表(TABLE)

創(chuàng)建數(shù)據(jù)表

普通創(chuàng)建

CREATETABLEuser(

idint(10)unsignedNOTNULLCOMMENT'Id',

usernamevarchar(64)NOTNULLDEFAULT'default'COMMENT'用戶名’,

passwordvarchar(64)NOTNULLDEFAULT'default'COMMENT'密碼',

emailvarchar(64)NOTNULLDEFAULT'default'COMMENT'郵箱'

)COMMENT與用戶表’;

根據(jù)已有的表創(chuàng)建新表

CREATETABLEvip_userAS

SELECT*FROMuser;

刪除數(shù)據(jù)表

DROPTABLEuser;

修改數(shù)據(jù)表

添加列

ALTERTABLEuser

ADDageint(3);

刪除列

ALTERTABLEuser

DROPCOLUMNage;

修改列

ALTERTABLE'user'

MODIFYCOLUMNagetinyint;

添加主鍵

ALTERTABLEuser

ADDPRIMARYKEY(id);

刪除主鍵

ALTERTABLEuser

DROPPRIMARYKEY;

視圖(VIEW)

,定義

o視圖是基于SQL語句的結(jié)果集的可視化的表。

o視圖是虛擬的表,本身不包含數(shù)據(jù),也就不能對其進(jìn)行索引操作。對視圖的操作

和對普通表的操作一樣。

?作用

o簡化復(fù)雜的SQL操作,比如復(fù)雜的聯(lián)結(jié);

o只使用實際表的一部分?jǐn)?shù)據(jù);

o通過只給用戶訪問視圖的權(quán)限,保證數(shù)據(jù)的安全性;

o更改數(shù)據(jù)格式和表示。

創(chuàng)建視圖

CREATEVIEWtop_10_user_viewAS

SELECTid,username

FROMuser

WHEREid<10;

刪除視圖

DROPVIEWtop10userview;

索引(INDEX)

?作用

o通過索引可以更加快速高效地查詢數(shù)據(jù)。

O用戶無法看到索引,它們只能被用來加速查詢。

■注意

O更新一個包含索引的表需要比更新一個沒有索引的表花費(fèi)更多的時間,這是由于

索引本身也需要更新。因此,理想的做法是僅僅在常常被搜索的列(以及表)上

面創(chuàng)建索引。

?唯一索引

O唯一索引表明此索引的每一個索引值只對應(yīng)唯一的數(shù)據(jù)記錄。

創(chuàng)建索引

CREATEINDEXuser_index

ONuser(id);

創(chuàng)建唯一索引

CREATEUNIQUEINDEXuser_index

ONuser(id);

刪除索引

ALTERTABLEuser

DROPINDEXuser_index;

約束

SQL約束用于規(guī)定表中的數(shù)據(jù)規(guī)則。

■如果存在違反約束的數(shù)據(jù)行為,行為會被約束終止。

?約束可以在創(chuàng)建表時規(guī)定(通過CREATETABLE語句),或者在表創(chuàng)建

之后規(guī)定(通過ALTERTABLE語句)。

■約束類型

oNOTNULL-指示某列不能存儲NULL值。

oUNIQUE-保證某列的每行必須有唯一的值。

OPRIMARYKEY-NOTNULL和UNIQUE的結(jié)合。確保某列(或兩個列

多個列的結(jié)合)有唯一標(biāo)識,有助于更容易更快速地找到表中的一個特定

的記錄。

oFOREIGNKEY?保證一個表中的數(shù)據(jù)匹配另一個表中的值的參照完整

性。

oCHECK-保證列中的值符合指定的條件。

oDEFAULT-規(guī)定沒有給列斌值時的默認(rèn)值。

創(chuàng)建表時使用約束條件:

CREATETABLEUsers(

Id[NT(10)UNSIGNEDNOTNULLAUTO_INCREMENTCOMMENT'自增Id',

UsernameVARCHAR(64)NOTNULLUNIQUEDEFAULT'default'COMMENT'用戶名',

PasswordVARCHAR(64)NOTNULLDEFAULT'default'COMMENT'密碼',

EmailVARCHAR(64)NOTNULLDEFAULT'default/COMMENT'郵箱地址',

EnabledTINYINT(4)DEFAULTNULLCOMMENT'是否有效',

PRIMARYKEY(Id)

)ENGINE-InnoDBAUT0_INCREMENT=2DEFAULTCHARSET-utf8mb4COMMENT=’用戶表';

(以下為TCL語句用法)

八、事務(wù)處理

■不能回退SELECT語句,回退SELECT語句也沒意義;也不能回退CREATE

和DROP語句。

MySQL默認(rèn)是隱式提交,每執(zhí)行一條語句就把這條語句當(dāng)成一個事務(wù)然后進(jìn)行

提交。當(dāng)出現(xiàn)STARTTRANSACTION語句時,會關(guān)閉隱式提交;當(dāng)COMMIT

或ROLLBACK語句執(zhí)行后,事務(wù)會自動關(guān)閉,重新恢復(fù)隱式提交。

■通過setautocommit=0可以取消自動提交,直到setautocommit=1才會提

交;autocommit標(biāo)記是針對每個連接而不是針對服務(wù)器的。

?指令

oSTARTTRANSACTION-指令用于標(biāo)記事務(wù)的起始點。

oSAVEPOINT?指令用于創(chuàng)建保留點。

oROLLBACKTO-指令用于回滾到指定的保留點;如果沒有設(shè)置保留點,則回退

至ijSTARTTRANSACTION語句處。

oCOMMIT-提交事務(wù)。

-開始事務(wù)

STARTTRANSACTION;

一插入操作A

INSERTINTOuser'

VALUES(1,*root1*,Jroot1*,'xxxx@163.com');

—創(chuàng)建保留點updateA

SAVEPOINTupdateA;

~插入操作B

INSERTINTO'user'

VALUES(2,'root2','root2','xxxx@163.com');

—網(wǎng)滾到保留點updateA

ROLLBACKTOupdateA;

-提交事務(wù),只有操作A生效

COMMIT;

(以下為DCL語句用法)九、權(quán)限控制

GRANT和REVOKE可在幾個層次上控制訪問權(quán)限:

整個服務(wù)器,使用GRANTALL和REVOKEALL;

整個數(shù)據(jù)庫,使用ONdatabase.*;

特定的表,使用ONdatabase.table;

特定的列;

特定的存儲過程。

新創(chuàng)建的賬戶沒有任何權(quán)限。

賬戶用username@host的形式定義,username@%使用的是

默認(rèn)主機(jī)名。

MySQL的賬戶信息保存在mysql這個數(shù)據(jù)庫中。

USEmysql;

SELECTuserFROMuser;

創(chuàng)建賬戶

CREATEUSERmyuserIDENTIFIEDBY*mypassword,;

修改賬戶名

UPDATEuserSETuser:'newuser'WHEREuser='myuser';

FLUSHPRIVILEGES;

刪除賬戶

DROPUSERmyuser;

查看權(quán)限

SHOWGRANTSFORmyuser;

授予權(quán)限

GRANTSELECT,INSERTON*.*TOmyuser;

刪除權(quán)限

REVOKESELECT,INSERTON*.*FROMmyuser;

更改密碼

SETPASSWORDFORmyuser二'mypass';

十、存儲過程

■存儲過程可以看成是對一系列SQL操作的批處理;

?使用存儲過程的好處

o代碼封裝,保證了一定的安全性;

o代碼復(fù)用;

O由于是預(yù)先編譯,因此具有很高的性能。

?創(chuàng)建存儲過程

O命令行中創(chuàng)建存儲過程需要自定義分隔符,因為命令行是以;為結(jié)束符,而存儲

過程中也包含了分號,因此會錯誤把這部分分號當(dāng)成是結(jié)束符,造成語法錯誤。

o包含in^out和inout三種參數(shù)。

O給變量賦值都需要用selectinto語句。

o每次只能給一個變量賦值,不支持集合的操作。

創(chuàng)建存儲過程

DROPPROCEDUREIFEXISTS-proc_adder';

DELIMITER;;

CREATEDEFINER='root'0'localhost'PROCEDUREproc_adder'(INaini,INbint,OUT

sumint)

BEGIN

DECLAREcint;

ifaisnullthenseta=0;

endif;

ifbisnullthensetb=0;

endif;

setsum=a+b;

END

99

DELIMITER;

使用存儲過程

set@b=5;

callprocadder(2,@b,@s);

select@sassum;

十一、游標(biāo)

?游標(biāo)(cursor)是一個存儲在DBMS服務(wù)器上的數(shù)據(jù)庫查詢,它不是一條

SELECT語句,而是被該語句檢索出來的結(jié)果集。

?在存儲過程中使用游標(biāo)可以對一個結(jié)果集進(jìn)行移動遍歷。

?游標(biāo)主要用于交互式應(yīng)用,其中用戶需要對數(shù)據(jù)集中的任意行進(jìn)行瀏覽和修改。

'使用游標(biāo)的四個步驟:

o聲明游標(biāo),這個過程沒有實際檢索出數(shù)據(jù);

O打開游標(biāo);

Q取出數(shù)據(jù);

O關(guān)閉游標(biāo);

DELIMITER$

CREATEPROCEDUREgetTotalO

BEGIN

DECLAREtotalINT;

~創(chuàng)建接收游標(biāo)數(shù)據(jù)的變量

DECLAREsidINT;

DECLAREsnameVARCHAR(IO);

-創(chuàng)建總數(shù)變量

DECLAREsageINT;

~創(chuàng)建結(jié)束標(biāo)志變量

DECLAREdoneINTDEFAULTfalse;

~創(chuàng)建游標(biāo)

DECLAREcurCURSORFORSELECTid,name,agefromcursortablewhereage>30;

~指定游標(biāo)循環(huán)結(jié)束時的返回值

DECLARECONTINUEHANDLERFORNOTFOUNDSETdone=true;

SETtotal=0;

OPENcur;

FETCHcurINTOsid,sname,sage;

WHILE(NOTdone)

DO

SETtotal=total+1;

FETCHcurINTOsid,sname,sage;

ENDWHILE;

CLOSEcur;

SELECTtotal;

END$

DELIMITER;

~調(diào)用存儲過程

callgetTotal0;

十二、觸發(fā)器

觸發(fā)器是一種與表操作有關(guān)的數(shù)據(jù)庫對象,當(dāng)觸發(fā)器所在表上出現(xiàn)指定事件時,將

調(diào)用該對象,即表的操作事件觸發(fā)表上的觸發(fā)器的執(zhí)行。

可以使用觸發(fā)器來進(jìn)行審計跟蹤,把修改記錄到另外一張表中。MySQL不允許

在觸發(fā)器中使用CALL語句,也就是不能調(diào)用存儲過程。BEGIN和END當(dāng)觸

發(fā)器的觸發(fā)條件滿足時,將會執(zhí)行BEGIN和END之間的觸發(fā)器執(zhí)行動作。

□注意:在MySQL中,分號;是語句結(jié)束的標(biāo)識符,遇到分號表示該段語句已

經(jīng)結(jié)束,MySQL可以開始執(zhí)行了。因此,解釋器遇到觸發(fā)器執(zhí)行動作

溫馨提示

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

最新文檔

評論

0/150

提交評論