簡(jiǎn)介
數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management System)是一種操縱和管理數(shù)據(jù)庫(kù)的大型軟件,用于建立、使用和維護(hù)數(shù)據(jù)庫(kù),簡(jiǎn)稱DBMS。它對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫(kù)的安全性和完整性。用戶通過DBMS訪問數(shù)據(jù)庫(kù)中的數(shù)據(jù),數(shù)據(jù)庫(kù)管理員也通過dbms進(jìn)行數(shù)據(jù)庫(kù)的維護(hù)工作。結(jié)構(gòu)化查詢語言(Structured Query Language)簡(jiǎn)稱SQL,是一種特殊目的的編程語言,是一種數(shù)據(jù)庫(kù)查詢和程序設(shè)計(jì)語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng);同時(shí)也是數(shù)據(jù)庫(kù)腳本文件的擴(kuò)展名。
歷史SQL語言的發(fā)展是從1974年開始的,其發(fā)展過程如下:
1974年由Boyce和Chamberlin提出,當(dāng)時(shí)稱SEQUEL。
1976年IBM公司的Sanjase研究所在研制RDBMS SYSTEM R時(shí)改為SQL。
1979年Oracle公司發(fā)表第一個(gè)基于SQL的商業(yè)化RDBMS產(chǎn)品。
1982年IBM公司出版第一個(gè)RDBMS語言SQL/DS。
1985年IBM公司出版第一個(gè)RDBMS語言DB2。
1986年美國(guó)國(guó)家標(biāo)準(zhǔn)化組織ANSI宣布SQL作為數(shù)據(jù)庫(kù)工業(yè)標(biāo)準(zhǔn)。
SQL 是一種可以在數(shù)據(jù)庫(kù)中數(shù)據(jù)進(jìn)行查詢、從數(shù)據(jù)庫(kù)中取回?cái)?shù)據(jù)、在數(shù)據(jù)庫(kù)中插入新的數(shù)據(jù)記錄、更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)、刪除數(shù)據(jù)庫(kù)中已有記錄的一種計(jì)算機(jī)語言。還可以創(chuàng)建新的數(shù)據(jù)庫(kù),在數(shù)據(jù)庫(kù)中建表、創(chuàng)建存儲(chǔ)過程、創(chuàng)建視圖以及設(shè)置其權(quán)限。所以在數(shù)據(jù)庫(kù)語言中,SQL 語言的運(yùn)用是相當(dāng)廣泛的1。
SQL是一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)語言,是面向集合的描述性非過程化語言。它功能強(qiáng),效率高,簡(jiǎn)單易學(xué)易維護(hù)。然而SQL語言由于以上優(yōu)點(diǎn),同時(shí)也出現(xiàn)了這樣一個(gè)問題:它是非過程性語言,即大多數(shù)語句都是獨(dú)立執(zhí)行的,與上下文無關(guān),而絕大部分應(yīng)用都是一個(gè)完整的過程,顯然用SQL完全實(shí)現(xiàn)這些功能是很困難的。所以大多數(shù)數(shù)據(jù)庫(kù)公司為了解決此問題,作了如下兩方面的工作:
1、擴(kuò)充SQL,在SQL中引入過程性結(jié)構(gòu);
2、把SQL嵌入到高級(jí)語言中,以便一起完成一個(gè)完整的應(yīng)用。
國(guó)際標(biāo)準(zhǔn)美國(guó)國(guó)家標(biāo)準(zhǔn)局(ANSI)與 國(guó)際標(biāo)準(zhǔn)化組織(ISO)已經(jīng)制定了SQL標(biāo)準(zhǔn)。ANSI是一個(gè)美國(guó)工業(yè)和商業(yè)集團(tuán)組織,負(fù)責(zé)開發(fā)美國(guó)的商務(wù)和通訊標(biāo)準(zhǔn)。ANSI同時(shí)也是ISO和IEC(國(guó)際電子技術(shù)委員會(huì))的成員之一。ANSI 發(fā)布與國(guó)際標(biāo)準(zhǔn)組織相應(yīng)的美國(guó)標(biāo)準(zhǔn)。1992年,ISO和IEC發(fā)布了SQL國(guó)際標(biāo)準(zhǔn),稱為SQL-92。ANSI隨之發(fā)布的相應(yīng)標(biāo)準(zhǔn)是ANSI SQL-92。ANSI SQL-92有時(shí)被稱為ANSI SQL。盡管不同的關(guān)系數(shù)據(jù)庫(kù)使用的SQL版本有一些差異,但大多數(shù)都遵循 ANSI SQL 標(biāo)準(zhǔn)。SQL Server使用ANSI SQL-92的擴(kuò)展集,稱為T-SQL,其遵循ANSI制定的 SQL-92標(biāo)準(zhǔn)2 。
特點(diǎn)1、語言風(fēng)格統(tǒng)一。SQL語言將數(shù)據(jù)定義語言DDL、數(shù)據(jù)操縱語言DML、數(shù)據(jù)控制語言DCL的功能于一體,語言風(fēng)格統(tǒng)一,可以獨(dú)立完成數(shù)據(jù)庫(kù)生命周期的全部活動(dòng),包括定義數(shù)據(jù)模式、插入數(shù)據(jù)、建立數(shù)據(jù)庫(kù)、查詢、更新、維護(hù)、數(shù)據(jù)庫(kù)重構(gòu)、數(shù)據(jù)庫(kù)安全性控制等一系列操作要求,這就是為數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開發(fā)提供了良好的環(huán)境。用戶在數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行投入后,還可以還可以根據(jù)需要隨時(shí)、逐步地修改模式,且并不影響數(shù)據(jù)庫(kù)的運(yùn)行,從而使系統(tǒng)具有良好的可擴(kuò)展性。
2、操作過程統(tǒng)一。在關(guān)系模型中實(shí)體和實(shí)體間的聯(lián)系均用關(guān)系表示,這種單一的數(shù)據(jù)結(jié)構(gòu)使數(shù)據(jù)的查找、插入、刪除、修改等每一種操作都只需要一種操作符,從而克服了非關(guān)系系統(tǒng)的信息表示方式的多樣性帶來的操作復(fù)雜性。例如,在DBTG中,需要兩種插入操作符:STORE用來把記錄存入數(shù)據(jù)庫(kù),COONNECT用來把記錄插入系值以建立數(shù)據(jù)之間的聯(lián)系。非關(guān)系模型(層次模型、網(wǎng)狀模型)的語言一般都分為模式數(shù)據(jù)定義語言(schema data definition language,模式DDL)、外模式數(shù)據(jù)定義語言(subschema data definition languange,外模式DDL)、與數(shù)據(jù)存儲(chǔ)有關(guān)的描述語言(data storage description language,DSDL)及數(shù)據(jù)操縱語言(data manipulation language,DML),分別用于定義模式、外模式、內(nèi)模式和進(jìn)行數(shù)據(jù)的存取與處理。當(dāng)用戶數(shù)據(jù)庫(kù)投入運(yùn)行后,如果需要修改模式,必須停止現(xiàn)有數(shù)據(jù)庫(kù)的運(yùn)行、存儲(chǔ)數(shù)據(jù)、修改模式并編譯后再?gòu)难b數(shù)據(jù)庫(kù),十分不便。
3、高度非過程化。SQL語言進(jìn)行數(shù)據(jù)操作,只需提出“做什么”,而無需指明“怎么做”,因此無需了解具體的存取路徑,因?yàn)榇嫒÷窂降倪x擇以及SQL語句的操作過程由系統(tǒng)自動(dòng)完成。這不僅大大減輕了用戶負(fù)擔(dān),而且有利于提高數(shù)據(jù)獨(dú)立性。非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操縱語言是面向過程的語言。用戶為完成某項(xiàng)請(qǐng)求,必須自行指定詳細(xì)的存取路徑。
4、面向集合的操作方式。SQL語言采用集合操作方式,請(qǐng)求只需一條SELECT命令即可獲得滿足所有條件的元組集合。SQL不僅操作對(duì)象、查找結(jié)果可以是元祖的集合,而且一次插入、刪除、更新操作的對(duì)象也可以是元組的集合。非關(guān)系數(shù)據(jù)模型采用的是面向記錄的操作方式,操作對(duì)象是一條記錄。例如,查詢所有平均成績(jī)?cè)?0分及以上的學(xué)生姓名,用戶必須編寫一大段處理程序,指明存取路徑和循環(huán)控制方法等,才能一條一條地把所有滿足條件地學(xué)生記錄查找出來。
5、一種語法,兩種使用方式。SQL語言既是自含式語言,又是嵌入式語言。
6、語言簡(jiǎn)介,易學(xué)易用。
分類SQL語言包括四類種主要程序設(shè)計(jì)語言類別的語句:數(shù)據(jù)查詢語言(DQL),數(shù)據(jù)操作語言(DML)和數(shù)據(jù)定義語言(DDL)及數(shù)據(jù)控制語言(DCL)還有。
數(shù)據(jù)查詢語言DQL數(shù)據(jù)查詢語言DQL基本結(jié)構(gòu)是由SELECT子句,F(xiàn)ROM子句,WHERE子句組成的查詢塊:
SELECT
FROM
WHERE
示例:查詢年齡大于28歲的所有學(xué)生的信息 SELECT * FROM student WHERE sage>28。
數(shù)據(jù)操作語言DML數(shù)據(jù)操縱語言DML主要有三種形式:
1) 插入:INSERT
語法格式1: insert into 表名 values(值1,值2......,值n);
語法格式2: insert into 表明(字段名1,字段名2,......,字段名n) values(值1,值2,......,值n)。
2) 更新:UPDATE
語法格式:update 表名 set 賦值表達(dá)式 [where 條件]
3) 刪除:DELETE
語法格式:delete from 表 [where 條件]。
數(shù)據(jù)定義語言DDL數(shù)據(jù)定義語言DDL用來創(chuàng)建數(shù)據(jù)庫(kù)中的各種對(duì)象:表、視圖、索引、同義詞、聚簇等。例如:
CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
DDL操作是隱性提交的,不能rollback。
數(shù)據(jù)控制語言DCL數(shù)據(jù)控制語言DCL用來授予或回收訪問數(shù)據(jù)庫(kù)的某種特權(quán),并控制數(shù)據(jù)庫(kù)操縱事務(wù)發(fā)生的時(shí)間及效果,對(duì)數(shù)據(jù)庫(kù)實(shí)行監(jiān)視等。如:
1) GRANT:授權(quán)。
2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一點(diǎn)。ROLLBACK:回滾。
回滾命令使數(shù)據(jù)庫(kù)狀態(tài)回到上次最后提交的狀態(tài)。其格式為:SQL>ROLLBACK。
3) COMMIT [WORK]:提交。
在數(shù)據(jù)庫(kù)的插入、刪除和修改操作時(shí),只有當(dāng)事務(wù)在提交到數(shù)據(jù)庫(kù)時(shí)才算完成。在事務(wù)提交前,只有操作數(shù)據(jù)庫(kù)的這個(gè)人才能有權(quán)看到所做的事情,別人只有在最后提交完成后才可以看到。提交數(shù)據(jù)有三種類型:顯式提交、隱式提交及自動(dòng)提交。下面分別說明這三種類型。
(1)顯式提交
用COMMIT命令直接完成的提交為顯式提交。其格式為:SQL>COMMIT;
(2) 隱式提交
用SQL命令間接完成的提交為隱式提交。這些命令是:
ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
(3) 自動(dòng)提交
若把AUTOCOMMIT設(shè)置為ON,則在插入、修改、刪除語句執(zhí)行后,系統(tǒng)將自動(dòng)進(jìn)行提交,這就是自動(dòng)提交。其格式為:SQL>SET AUTOCOMMIT ON。