版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
SQL語法速成手冊
一、基本概念
?數(shù)據(jù)庫術(shù)語
?數(shù)據(jù)庫(database)■保存有組織的數(shù)據(jù)的容器(通常是一個(gè)文件或一組文件)。
?數(shù)據(jù)表(table)-某種特定類型數(shù)據(jù)的結(jié)構(gòu)化清單。
?模式(schema)-關(guān)于數(shù)據(jù)庫和表的布局及特性的信息。模式定義了數(shù)據(jù)在表中如何存儲,
包含存儲什么樣的數(shù)據(jù),數(shù)據(jù)如何分解,各部分信息如何命名等信息。數(shù)據(jù)庫和表都有模式。
?列(column)-表中的一個(gè)字段。所有表都是由一個(gè)或多個(gè)列組成的。
?行(row)-表中的一個(gè)記錄。
?主鍵(primarykey)-一列(或一組列),其值能夠唯一標(biāo)識表中每一行。
?SQL語法
?SQL(StructuredQueryLanguage),標(biāo)準(zhǔn)SQL由ANSI標(biāo)準(zhǔn)委員會管理,從而稱為ANSI
SQL。各個(gè)DBMS都有自己的實(shí)現(xiàn),如PL/SQL、Transact-SQL等。
?SQL語法結(jié)構(gòu)
……-[UPDATEcountry_____,干岬__________
1[SETpopulation=population+1-
<1-*.-[WHEREname=.'USA1.:
£少一“18I
I
*ZhancPec
?SQL語法結(jié)構(gòu)包括:
?子句-是語句和查詢的組成成分。(在某些情況下,這些都是可選的。)
?表達(dá)式-可以產(chǎn)生任何標(biāo)量值,或由列和行的數(shù)據(jù)庫表
?謂詞-給需要評估的SQL三值邏輯(3VL)(true/false/unknown)或布爾真值指定條件,
并限制語句和查詢的效果,或改變程序流程。
?查詢-基于特定條件檢索數(shù)據(jù)。這是SQL的一個(gè)重要組成部分。
?語句-可以持久地影響綱要和數(shù)據(jù),也可以控制數(shù)據(jù)庫事務(wù)、程序流程、連接、會話或診斷。
?SQL語法要點(diǎn)
?SQL語句不區(qū)分大小寫,但是數(shù)據(jù)庫表名、列名和值是否區(qū)分,依賴于具體的DBMS以及配
置。
?例如:SELECT與select、Select是相同的。
?多條SQL語句必須以分號(;)分隔。
?處理SQL語句時(shí),所有空格都被忽略。SQL語句可以寫成一行,也可以分寫為多行。
?-一行SQL語句
?UPDATEuserSETusername='robot',password='robot'WHEREusername=
'root';
?-多行SQL語句
?UPDATEuser
?SETusemame='robo:'/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ù)庫對象。
的核心指令是
?DDLCREATE.ALTER.DROPo
?數(shù)據(jù)操縱語言(DML)
?數(shù)據(jù)操縱語言(DataManipulationLanguage,DML)是用于數(shù)據(jù)庫操作,對數(shù)據(jù)庫其中
的對象和數(shù)據(jù)運(yùn)行訪問工作的編程語句。
?DML的主要功能是訪問數(shù)據(jù),因此其語法都是以讀寫數(shù)據(jù)庫為主。
?DML的核心指令是INSERT.UPDATE.DELETE.SELECT,這四個(gè)指令合稱
CRUD(Create,Read,Update,Delete),即增刪改查。
?事務(wù)控制語言(TCL)
?事務(wù)控制語言(TransactionControlLanguage,TCL)用于管理數(shù)據(jù)庫中的事務(wù)。這些用
于管理由DML語句所做的更改。它還允許將語句分組為邏輯事務(wù)。
?TCL的核心指令是COMMIT.ROLLBACK.
?數(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以及不同的安全性實(shí)體,其支持的權(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
?SETusemame='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用于返回唯一不同的值。它作用于所有列,也就是說所有列的值都相同才算相同。
?LIMIT限制返回的行數(shù)。可以有兩個(gè)參數(shù),第一個(gè)參數(shù)為起始行,從0開始;第二個(gè)參數(shù)
為返回的總行數(shù)。
?ASC:升序(默認(rèn))
?DESC:降序
?查詢單列
?SELECTprod_name
?FROMproducts;
?查詢多列
?SELECTprod_id,prod_name,prod_price
?FROMproducts;
?查詢所有列
?ELECT*FROMproducts;
?查詢不同的值
?SELECTDISTINCT
?vendjdFROMproducts;
?限制查詢結(jié)果
?-返回前5行
?SELECT*FROMmytableLIMIT5;
?SELECT*FROMmytableLIMIT0,5;
?-返回第3~5行
?SELECT*FROMmytableLIMIT2,3;
三、子查詢
?概述
?子查詢是嵌套在較大查詢中的SQL查詢。子查詢也稱為內(nèi)部查詢或內(nèi)部選擇,而包含子查詢的
語句也稱為外部查詢或外部選擇。
?子查詢可以嵌套在SELECT,INSERT,UPDATE或DELETE語句內(nèi)或另一個(gè)子查詢中。
?子查詢通常會在另一個(gè)SELECT語句的WHERE子句中添加。
?您可以使用匕匕較運(yùn)算符,如>,<,或比較運(yùn)算符也可以是多行運(yùn)算符,如IN,ANY或
ALL。
?子鼾旬必須被圓括號()括起來。
?內(nèi)部查詢首先在其父直詢之前執(zhí)行,以便可以將內(nèi)部查詢的結(jié)果傳遞給外部直詢。執(zhí)行過程可
以參考下圖:
StudentMarks
StudentlDName
Abe
Abhay
Actlin
Adelpbos
(SELECT<rvdeaiid.?name,bloulnarks
jFROMXodoita.marksb
OUTERQUERY、WHERE*-bBtudMtid
VANDb.totalmarkf>(r?svltofIMMCq??ry)
INNBKQUERYf黑二吟i1V
(WHEREsh>4?Mid-*V00r);
ResultofOuterQueryResultofInnerQuery
StudentlDTotalmarks
V00195
V00280
V00374
SELECTa.studeAtid.a.name,btotal.inarkf
FROMstudenta.taarktb
WHEREastudentid-bstud<etid
ANDb.totalmarks>
(SELECTtouJ.nmrkf
FROMmarls/
WHEREstoieotid-'002);f
?
@ZhangPeng
ResultofSubquery
?子查詢的子查詢
?SELECTcust_name,cust_contact
?FROMcustomers
?WHEREcustjdIN(SELECTcustjd
?FROMorders
?WHEREorder_numIN(SELECTorder_num
?FROMorderitems
?WHEREprodjd='RGAN01'));
?WHERE
?WHERE子句用于過濾記錄,即縮小訪問數(shù)據(jù)的范圍。
?WHERE后跟一個(gè)返回true或false的條件。
?WHERE可以與SELECT,UPDATE和DELETE一起使用。
?可以在WHERE子句中使用的操作符
運(yùn)算符描述
=等于
<>不等于.注爰:在SQI的一些標(biāo)本中,該攆作總可被寫成!=
>
<小于
>=大于等于
<=小于等于
BETWEEN在某個(gè)范圖內(nèi)
LIKE搜索某種模式
IN指定針對某個(gè)列的多個(gè)可能值工、?HP/F^Z
?SELECT語句中的WHERE子句
?SELECT*FROMCustomers
?WHEREcust_name='KidsPlace';
?UPDATE語句中的WHERE子句
?UPDATECustomersSETcust_name='JackJones'
?WHEREcust_name='KidsPlace";
?DELETE語句中的WHERE子句
?DELETEFROMCustomers
?WHERE='KidsPlace';
?IN和BETWEEN
?概述
?IN操作符在WHERE子句中使用,作用是在指定的幾個(gè)特定值中任選一個(gè)值。
?BETWEEN操作符在WHERE子句中使用,作用是選取介于某個(gè)范圍內(nèi)的值。
?IN示例
?SELECT*FROMproducts
?WHEREvendjdIN('DLL01\'BRS01');
?BETWEEN示例
?SELECT*FROMproducts
?WHEREprod.priceBETWEEN3AND5;
?AND、OR、NOT
?概述
?AND、OR、NOT是用于對過濾條件的邏輯處理指令。
?AND優(yōu)先級高于OR,為了明確處理順序,可以使用().
?AND操作符表示左右條件都要滿足。
?OR操作符表示左右條件滿足任意一個(gè)即可。
?NOT操作符用于否定一個(gè)條件。
?AND示例
?SELECTprodjd,prod_name,prod_price
?FROMproducts
?WHEREvendjd='DLL01'ANDprod_price<=4;
?OR示例
?SELECTprod_id,prod_name,prod_price
?FROMproducts
?WHEREvendjd='DLL01'ORvendjd='BRS01';
?NOT示例
?SELECT*FROMproducts
?WHEREprod_priceNOTBETWEEN3AND5;
?LIKE
?概述
?LIKE操作符在WHERE子句中使用,作用是確定字符串是否匹配模式。
?只有字段是文本值時(shí)才使用LIKE。
?LIKE支持兩個(gè)通配符匹配選項(xiàng):%和3
?不要濫用通配符,通配符位于開頭處匹配會非常慢。
?%表示任何字符出現(xiàn)任意次數(shù)。
?一表示任何字符出現(xiàn)一次。
?%示例
?SELECTprodjd,prod_name,prod_price
?FROMproducts
?WHEREprod_nameLIKE'%beanbag%';
?一示例
?SELECTprod_id,prod_name,prod_price
?FROMproducts
?WHEREprod_nameLIKEinchteddybear';
?四、連接和組合
?連接(JOIN)
?概述
?如果一個(gè)JOIN至少有一個(gè)公共字段并且它們之間存在關(guān)系,則該JOIN可以在兩個(gè)或多個(gè)
表上工作。
?連接用于連接多個(gè)表,使庠JOIN關(guān)鍵字,并且條件語句使用ON而不是WHERE。
?JOIN保持基表(結(jié)構(gòu)和數(shù)據(jù))不變。
?JOIN有兩種連接類型:內(nèi)連接和外連接。
?內(nèi)連接又稱等值連接,使用INNERJOIN關(guān)鍵字。在沒有條件語句的情況下返回笛卡爾積。
?白連接可以看成內(nèi)連接的一種,只是連接的表是自身而已。
?自然連接是把同名列通過=測試連接起來的,同名列可以有多個(gè)。
?內(nèi)連接vs自然連接
?內(nèi)連接提供連接的列,而自然連接自動(dòng)連接所有同名列。
?外連接返回一個(gè)表中的所有行,并且僅返回來自次表中滿足連接條件的那些行,即兩個(gè)表
中的列是相等的。外連接分為左外連接、右外連接、全外連接(Mysql不支持)。
?左外連接就是保留左表沒有關(guān)聯(lián)的行。
?右外連接就是保留右表沒有關(guān)聯(lián)的行。
?連接vs子查詢
?連接可以替換子查詢,并且比子查詢的效率一般會更快。
SQLJOINS
SEll-CT<iekci.HM>
FROMTabkAA
INNERJOINTabkBB
ONAKcy:B.Kcy
SELECT<M1CCI.UM>SEIJ£CT<*dcctUM>
FROMTaMeAAFROMTabteAA
UiFTJOINTaNcRBRIGKTJOINTabkBB
八■K"BK..ONA.Key=B.Kcy
WHEREB.Kcy1SNVU.?HEREA.Kcy1$NULL
MilJiCTVyEJS腐毆;2
FROMTubleAAFlIXOUTURJOINTobkBH
FVIXOUTERJOINTabkBHONA.Kcy-B.Kcy
ONAKcy=B.Kcy0HEREA.Kc>ISNVIX
ORILKcyISNUIX
?內(nèi)連接(INNERJOIN)
?SELECTvend_name,prod_name,prod_price
?FROMvendorsINNERJOINproducts
?ONvendors.vend_id=products.vend_id;
?自連接
?SELECTcl.custjd,cl.cust_name,cl.cust_contact
?FROMcustomerscl,customersc2
?WHEREcl.cust_name=c2.cust_name
?ANDc2.cust_contact='JimJones';
?自然連接(NATURALJOIN)
?SELECT*
?FROMProducts
?NATURALJOINCustomers;
?左連接(LEFTJOIN)
?SELECTcustomers.custjd,orders.order_num
?FROMcustomersLEFTJOINorders
?ONcustomers.custjd=orders.cust_id;
?右連接(RIGHTJOIN)
?SELECTcustomers.custjd,orders.order_num
?FROMcustomersRIGHTJOINorders
?ONcustomers.cust_id=orders.cust_id;
?組合(UNION)
?概述
?UNION運(yùn)算符將兩個(gè)或更多查詢的結(jié)果組合起來,并生成一個(gè)結(jié)果集,其中包含來自
UNION中參與查詢的提取行。
?UNION基本規(guī)則
?所有查詢的列數(shù)和列順序必須相同。
?每個(gè)查詢中涉及表的列的數(shù)據(jù)類型必須相同或兼容。
?通常返回的列名取自第一個(gè)查詢。
?默認(rèn)會去除相同行,如果需要保留相同行,使用UNIONALL。
?只能包含一個(gè)ORDERBY子句,并且必須位于語句的最后。
?應(yīng)用場景
?在一個(gè)查詢中從不同的表返回結(jié)構(gòu)數(shù)據(jù)。
?對一個(gè)表執(zhí)行多個(gè)查詢,按一個(gè)查詢返回?cái)?shù)據(jù)。
?組合查詢
?SELECTcust_name,cust_contactfcust_email
?FROMcustomers
?WHEREcust.stateIN('IL','IN','MI')
?UNION
?SELECTcust_name,cust_contact,cust_email
?FROMcustomers
?WHEREcust_name='Fun4AH';
?JOINvsUNION
?JOIN中連接表的列可能不同,但在UNION中,所有查詢的列數(shù)和列順序必須相同。
?UNION將查詢之后的行放在一起(垂直放置),但JOIN將查詢之后的列放在一起(水平
放置),即它構(gòu)成一個(gè)笛卡爾積。
?五、函數(shù)
□注意:不同數(shù)據(jù)庫的函數(shù)往往各不相同,因此不可移植。本節(jié)主要以Mysql的函數(shù)為例。
?文本處理
?圖示
函數(shù)說明
LEFT。、RIGHTO左邊或者右邊的手將
LOVER。、UPPER0轉(zhuǎn)接為小寫或者大寫
LTRIMO.RTIMO去除左邊或者右邊的空喀
LEBGTHO長度
轉(zhuǎn)的謂音值工卜飾源社%
SOUNDEX0P
?其中,SOUNDEX0可以將一個(gè)字符串轉(zhuǎn)換為描述其語音表示的字母數(shù)字模式。
?SELECT*
?FROMmytable
?WHERESOUNDEX(coll)=SOUNDEX('apple')
?日期和時(shí)間處理
?日期格式:YYYY-MM-DD
?時(shí)間格式:HH:MM:SS
?圖示
函放購明
AddDateO本m-個(gè)日刊(天、K9)
AddTlMO■tO一個(gè)時(shí)網(wǎng)(BJ.分等)
CuxDat?()返但臺mE期
CUXTIMO逅13■的時(shí)恒1
DftteO遁應(yīng)日期時(shí)間的E再部分
D&teHiffO計(jì)弼個(gè)E期之工
Date.Md()高席昊活的日期的載
Dste_For>at<>返回一個(gè)格式化的E期或融商?
DayO返國一個(gè)BIB的天數(shù)部分
DayOfVMk0對于一個(gè)EJB,逅值對應(yīng)的星期幾
Hour()逅@一個(gè)時(shí)涌的小心部分
IinuttO返回一個(gè)時(shí)】司的分1,都分
Month()亞目一個(gè)E期的月6部分
NovO運(yùn)叵蟲的E期切外何
Sec?sid<)返回一個(gè)時(shí)間的625分
TiwoO返回一個(gè)ESW國的臥前郃分
TearO返圓一個(gè)E*修舊部分之萬深牡口
?代碼示例:
?mysql>SELECTNOW();
?2018-4-1420:25:11
■數(shù)值處理
?圖示
函數(shù)說明
SINOIES
COSO余無
TANO正切
ABS()絕對值
SQRTO平方根
MODO余數(shù)
EXPO指數(shù)
PK)國周率
RANDO隨機(jī)政二腦外產(chǎn)開滿i社Z
?匯總
?圖示
函敷說明
ATC()逅回至列的平均值
COUNT()返回某列的行數(shù)
MAXO返回某列的倭大值
MIHO返回基列的M小值
SUMO逅回某列值之和外IP開源社區(qū)
?使用DISTINCT可以讓匯總函數(shù)值匯總不同的值。
?SELECTAVG(DISTINCTcoll)ASavg_col
?FROMmytable
?六、排序和分組
?ORDERBY
?ORDERBY用于對結(jié)果集進(jìn)行排序。
?ASC:升序(默認(rèn))
?DESC:降序
?可以按多個(gè)列進(jìn)行排序,并且為每個(gè)列指定不同的排序方式
?指定多個(gè)列的排序方向
?SELECT*FROMproductsORDERBYprod_priceDESC,ASC;
?GROUPBY
?概述
?GROUPBY子句將記錄分組到匯總行中。
?GROUPBY為每個(gè)組返回一個(gè)記錄。
?GROUPBY通常還涉及聚合:COUNT,MAX,SUM,AVG等。
?GROUPBY可以按一列或多列進(jìn)行分組。
?GROUPBY按分組字段進(jìn)行排序后,ORDERBY可以以匯總字段來進(jìn)行排序。
?分組
?SELECTcust_name,COUNT(cust_address)ASaddr_num
?FROMCustomersGROUPBYcust_name;
?分組后排序
?SELECTcust_name,COUNT(cust_address)ASaddr_num
?FROMCustomersGROUPBYcust_name
?ORDERBYcust_nameDESC;
?HAVING
?概述
?HAVING用于對匯總的GROUPBY結(jié)果進(jìn)行過濾。
?HAVING要求存在一個(gè)GROUPBY子句。
?WHERE和HAVING可以在相同的查詢中。
?HAVINGvsWHERE
?WHERE和HAVING都是用于過濾。
?HAVING適用于匯總的組記錄;而WHERE適用于單個(gè)記錄。
?使用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)
?定義
?視圖是基于SQL語句的結(jié)果集的可視化的表。
?視圖是虛擬的表,本身不包含數(shù)據(jù),也就不能對其進(jìn)行索引操作。對視圖的操作和對普通
表的操作一樣。
?作用
?簡化復(fù)雜的SQL操作,比如復(fù)雜的聯(lián)結(jié);
?只使用實(shí)際表的一部分?jǐn)?shù)據(jù);
?通過只給用戶訪問視圖的權(quán)限,保證數(shù)據(jù)的安全性;
?更改數(shù)據(jù)格式和表示。
?創(chuàng)建視圖
?CREATEVIEWtop_10_user_viewASSELECTid,usernameFROMuserWHEREid<10;
?刪除視圖
?DROPVIEWtop_10_user_view;
?索引(INDEX)
?作用
?通過索引可以更加快速高效地查詢數(shù)據(jù)。
?用戶無法看到索引,它們只能被用來加速杳詢。
?注意
?更新一個(gè)包含索引的表需要比更新一個(gè)沒有索引的表花費(fèi)更多的時(shí)間,這是由于索引本身
也需要更新。因此,理想的做法是僅僅在常常被搜索的列(以及表)上面創(chuàng)建索引。
?唯一索引
?唯一索引表明此索引的每一個(gè)索引值只對應(yīng)唯一的數(shù)據(jù)記錄。
?創(chuàng)建索引
?CREATEINDEXuserJndexONuser(id);
?創(chuàng)建唯一索引
?CREATEUNIQUEINDEXuserjndexONuser(id);
?刪除索引
?ALTERTABLEuserDROPINDEXuserjndex;
?約束
SQL約束用于規(guī)定表中的數(shù)據(jù)規(guī)則.
?概述
?如果存在違反約束的數(shù)據(jù)行為,行為會被約束終止。
?約束可以在創(chuàng)建表時(shí)規(guī)定(通過CREATETABLE語句),或者在表創(chuàng)建之后規(guī)定(通過
ALTERTABLE語句)。
?約束類型
?NOTNULL-指示某歹!J不能存儲NULL值。
?UNIQUE-保證某列的每行必須有唯一的值。
?PRIMARYKEY-NOTNULL和UNIQUE的結(jié)合。確保某列(或兩個(gè)列多個(gè)列的結(jié)合)
有唯一標(biāo)識,有助于更容易更快速地找到表中的一個(gè)特定的記錄。
?FOREIGNKEY-保證一個(gè)表中的數(shù)據(jù)匹配另一個(gè)表中的值的參照完整性。
?CHECK-保證列中的值符合指定的條件。
?DEFAULT-規(guī)定沒有給列賦值時(shí)的默認(rèn)值。
?創(chuàng)建表時(shí)使用約束條件:
?CREATETABLEUsers(
?IdINT(IO)UNSIGNEDNOTNULLAUTOJNCREMENTCOMMENT'自增Id',
?UsernameVARCHAR(64)NOTNULLUNIQUEDEFAULT'default'COMMENT'用戶名
?PasswordVARCHAR(64)NOTNULLDEFAULT'default'COMMENT'密碼
?EmailVARCHAR(64)NOTNULLDEFAULT'default'COMMENT'郵箱地址',
?EnabledTINYINT(4)DEFAULTNULLCOMMENT'是否有效
?PRIMARYKEY(Id)
?)ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=utf8mb4
COMMENT=,用戶表';
?(以下為TCL語句用法)
?八、事務(wù)處理
?概述
?不能回退SELECT語句,回退SELECT語句也沒意義;也不能回退CREATE和DROP語句。
?MySQL默認(rèn)是隱式提交,每執(zhí)行一條語句就把這條語句當(dāng)成一個(gè)事務(wù)然后進(jìn)行提交。當(dāng)出現(xiàn)
STARTTRANSACTION語句時(shí),會關(guān)閉隱式提交;當(dāng)COMMIT或ROLLBACK語句執(zhí)行后,
事務(wù)會自動(dòng)關(guān)閉,重新恢復(fù)隱式提交。
?通過setautocommit=0可以取消自動(dòng)提交,直到setautocommit=1才會提交;
autocommit標(biāo)記是針對每個(gè)連接而不是針對服務(wù)器的。
?指令
?STARTTRANSACTION-指令用于標(biāo)記事務(wù)的起始點(diǎn)。
?SAVEPOINT-指令用于創(chuàng)建保留點(diǎn)。
?ROLLBACKTO-指令用于回滾到指定的保留點(diǎn);如果沒有設(shè)置保留點(diǎn),則回退到START
TRANSACTION語句處。
?COMMIT-提交事務(wù)。
?-開始事務(wù)
?STARTTRANSACTION;
?-插入操作
?AINSERTINTOuser'
?VALUES(1,'rootl;,rootl','xxxx@163.com');
?-創(chuàng)建保留點(diǎn)updateA
?SAVEPOINTupdateA;
?-插入操作B
?INSERTINTO'user'VALUES(2,70012','root2\'xxxx@163.com');
?-回滾到保留點(diǎn)updateA
?ROLLBACKTOupdateA;
?提交事務(wù),只有操作A生效
?COMMIT;
?(以下為DCL語句用法)
?九、權(quán)限控制
?概述
?GRANT和REVOKE可在幾個(gè)層次上控制訪問權(quán)限:
?整個(gè)服務(wù)器,使用GRANTALL和REVOKEALL;
?整個(gè)數(shù)據(jù)庫,使用ONdatabase.*;
?特定的表,使用ONdatabase.table;
?特定的列;
?特定的存儲過程。
?新創(chuàng)建的賬戶沒有任何權(quán)限。
?賬戶用username@host的形式定義,username@%使用的是默認(rèn)主機(jī)名。
?MySQL的賬戶信息保存在mysql這個(gè)數(shù)據(jù)庫中。
?USEmysql;SELECTuserFROMuser;復(fù)制代碼
?創(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操作的批處理;
?使用存儲過程的好處
?代碼封裝,保證了一定的安全性;
?代碼復(fù)用;
?由于是預(yù)先編譯,因此具有很高的性能。
?創(chuàng)建存儲過程
?命令行中創(chuàng)建存儲過程需要自定義分隔符,因?yàn)槊钚惺且?;為結(jié)束符,而存儲過程中也包
含了分號,因此會錯(cuò)誤把這部分分號當(dāng)成是結(jié)束符,造成語法錯(cuò)誤。
?包含in、out和inout三和參數(shù)。
?給變量賦值都需要用selectinto語句。
?每次只能給一個(gè)變量賦值,不支持集合的操作。
?創(chuàng)建存儲過程
?DROPPROCEDUREIFEXISTSproc.adder';
?DELIMITER;;
?CREATEDEFINER='root'@'lpcalhost'PROCEDURE'proc_adder'(INaint,INbint,OUT
sumint)
?BEGIN
?DECLAREcint;
?ifaisnullthenseta=0;
?endif;
?ifbisnullthensetb=0;
?endif;
?setsum=a+b;
?END
?;;
?DELIMITER;
?使用存儲過程
?set@b=5;
?callproc_adder(2,@b,@s);
?select@sassum;
?H-、淵示
*Mi*
?游標(biāo)(cursor)是一個(gè)存儲在DBMS服務(wù)器上的數(shù)據(jù)庫查詢,它不是一條SELECT語句,而是
被該語句檢索出來的結(jié)果集。
?在存儲過程中使用游標(biāo)可以對一個(gè)結(jié)果集進(jìn)行移動(dòng)遍歷。
?游標(biāo)主要用于交互式應(yīng)用,其中用戶需要對數(shù)據(jù)集中的任意行進(jìn)行瀏覽和修改。
?使用游標(biāo)的四個(gè)步驟:
?聲明游標(biāo),這個(gè)過程沒有實(shí)際檢索出數(shù)據(jù);
?打開游標(biāo);
?取出數(shù)據(jù);
?關(guān)閉游標(biāo);
?SQL語句示例:
?DELIMITER$
?CREATEPROCEDUREgetTotal()
?BEGIN
?DECLAREtotalINT;
?-創(chuàng)建接收游標(biāo)數(shù)據(jù)的變量
?DECLAREsidINT;
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度智慧城市建設(shè)擔(dān)保協(xié)議3篇
- 運(yùn)動(dòng)隊(duì)訓(xùn)練中的科技裝備與智能化管理
- 2025版商業(yè)綜合體物業(yè)商鋪裝修管理及維護(hù)服務(wù)協(xié)議書3篇
- 網(wǎng)絡(luò)信息搜索與評價(jià)能力的培養(yǎng)方案設(shè)計(jì)
- 小學(xué)數(shù)學(xué)課堂的科學(xué)實(shí)驗(yàn)教學(xué)探討
- 2025年粵教新版選修6歷史下冊階段測試試卷含答案
- 二零二五年度離婚協(xié)議中夫妻共同財(cái)產(chǎn)分割及子女撫養(yǎng)協(xié)議范本6篇
- 2025年蘇人新版必修1歷史下冊月考試卷含答案
- 2025版無息醫(yī)療健康貸款合同書示例3篇
- 2025年浙教版選擇性必修三語文下冊階段測試試卷
- 2024年09月2024興業(yè)銀行總行崗測評筆試歷年參考題庫附帶答案詳解
- 山東省煙臺市招遠(yuǎn)市2024-2025學(xué)年九年級上學(xué)期期末考試英語(筆試)試題(含答案)
- 駱駝祥子讀書筆記一至二十四章
- 2025年方大萍安鋼鐵招聘筆試參考題庫含答案解析
- 2024年醫(yī)師定期考核臨床類考試題庫及答案(共500題)
- 2025年電力工程施工企業(yè)發(fā)展戰(zhàn)略和經(jīng)營計(jì)劃
- 2022年公務(wù)員多省聯(lián)考《申論》真題(安徽C卷)及答案解析
- 大型活動(dòng)保安培訓(xùn)
- 2024年大學(xué)本科課程教育心理學(xué)教案(全冊完整版)
- 信息系統(tǒng)運(yùn)維服務(wù)類合同6篇
- 江蘇省七市2025屆高三最后一卷物理試卷含解析
評論
0/150
提交評論