版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教部編版八年級上冊語文《任務(wù)一:新聞閱讀》教學(xué)設(shè)計
- 2023-2024學(xué)年科學(xué)一年級上冊教科版《4這是誰的葉》教學(xué)設(shè)計
- 九年級歷史下冊(部編版)第17課 二戰(zhàn)后資本主義的新變化(教學(xué)設(shè)計)
- 人教版(2019)高中英語必修第二冊 Unit 5 Music Reading and Thinking名師教學(xué)設(shè)計
- 2024年度河北省安全員之C證(專職安全員)綜合檢測試卷A卷含答案
- 三年級道德與法治下冊《我們的公共生活》單元作業(yè)設(shè)計
- 2024年度海南省安全員之C證(專職安全員)能力提升試卷B卷附答案
- 一年級數(shù)學(xué)計算題專項練習(xí)匯編
- 江西省九江市修水縣2024-2025學(xué)年九年級上學(xué)期10月月考化學(xué)試題(無答案)
- 陜西省西安市曲江第一學(xué)校2024-2025學(xué)年九年級上學(xué)期第一次月考數(shù)學(xué)試題(無答案)
- 岳麓山國家風(fēng)景名勝區(qū)風(fēng)景資源調(diào)查及評價報告
- 體系工程師崗位職責(zé)
- 瀝青路面工程監(jiān)理實施細(xì)則
- 塑料袋的警告語(歐洲)
- 康美藥業(yè)股份有限公司2018年度財務(wù)報表分析報告
- 公司內(nèi)部協(xié)作工單模板
- 道路建設(shè)社會穩(wěn)定風(fēng)險評估報告
- 磚圓形檢查井工程量計算(無密碼)
- 量子力學(xué)課后習(xí)題答案(共89頁)
- 利潤表(一般公司通用模板)
- 維語宗教事務(wù)條例(2015)
評論
0/150
提交評論