3.1 SQL概述
3.1.1 產(chǎn)生與發(fā)展
最早在IBM的關(guān)系數(shù)據(jù)庫管理系統(tǒng)原型SystemR上實(shí)現(xiàn),后來美國國家標(biāo)準(zhǔn)局(ANSI)批準(zhǔn)SQL作為關(guān)系數(shù)據(jù)庫語言的美國標(biāo)準(zhǔn),同年公布了SQL標(biāo)準(zhǔn)文本。近些年來SQL標(biāo)準(zhǔn)的內(nèi)容越來越豐富和復(fù)雜。目前沒有任何一個(gè)數(shù)據(jù)庫系統(tǒng)能夠支持SQL標(biāo)準(zhǔn)的所有概念和特性,同時(shí)不少軟件廠商對(duì)SQL基本命令集合進(jìn)行了不同程度的修改和擴(kuò)充,又可以支持標(biāo)準(zhǔn)外的一些功能特性。
3.1.2 SQL的特點(diǎn)
SQL的主要特點(diǎn)包括以下幾部分:
1.綜合統(tǒng)一
數(shù)據(jù)庫系統(tǒng)的主要功能是通過數(shù)據(jù)庫支持的數(shù)據(jù)語言來實(shí)現(xiàn)的。
非關(guān)系模型的數(shù)據(jù)語言一般分為:
- 模式數(shù)據(jù)定義語言(模式DDL)
- 外模式數(shù)據(jù)定義語言(外模式DDL)
- 數(shù)據(jù)存儲(chǔ)有關(guān)的描述語言(DSDL)
- 數(shù)據(jù)操縱語言(DML)
曾經(jīng)的用戶數(shù)據(jù)庫投入運(yùn)行后,如果需要修改模式,必須停止現(xiàn)有數(shù)據(jù)庫的運(yùn)行,修改模式并且編譯后再重裝數(shù)據(jù)庫,十分麻煩。而SQL可以獨(dú)立完成數(shù)據(jù)庫生命周期中的全部活動(dòng)。因此用戶在數(shù)據(jù)庫系統(tǒng)投入使用后還可以根據(jù)需要隨時(shí)的逐步的修改模式,并不影響數(shù)據(jù)庫運(yùn)行,從而使得系統(tǒng)具有良好的可擴(kuò)展性。
2.高度非過程化
非關(guān)系數(shù)據(jù)庫模型的數(shù)據(jù)操縱語言是面向過程的語言。而使用SQL的時(shí)候,只需要提出“做什么”而無需知名怎么做,因此無需了解存取路徑。這個(gè)工作由系統(tǒng)自動(dòng)完成。
3.面向集合的操作方式
SQL采用幾何操作方式,對(duì)于CRUD的操作以及操作對(duì)象、查找結(jié)果等操作都可以對(duì)元組集合進(jìn)行操作。
4.以統(tǒng)一語法結(jié)構(gòu)提供多種使用方式
SQL既是獨(dú)立的語言,也是嵌入式語言。SQL可以嵌入到高級(jí)語言的程序中,而且無論是獨(dú)立使用還是嵌入使用,其語法結(jié)構(gòu)是基本一致的嗎,因此統(tǒng)一了在不同語境下的語法使用。
3.1.3 SQL的基本概念
用戶可以使用SQL對(duì)基本表和視圖進(jìn)行基本操作,他們都是關(guān)系集合。
基本表是本身獨(dú)立存在的表,在關(guān)系數(shù)據(jù)庫管理系統(tǒng)中一個(gè)關(guān)系對(duì)應(yīng)一個(gè)基本表。一個(gè)或者多個(gè)基本表對(duì)應(yīng)一個(gè)存儲(chǔ)文件,一個(gè)表可以帶若干索引,索引也可以存放在存儲(chǔ)文件中。視圖是一個(gè)或者幾個(gè)基本表導(dǎo)出的表,他不獨(dú)立存儲(chǔ)在數(shù)據(jù)庫中,也就是視圖是一個(gè)虛表,其中的信息是一個(gè)或者幾個(gè)基本表的映射,通常用于供人查看。存儲(chǔ)文件是數(shù)據(jù)的物理形式,存儲(chǔ)文件的邏輯結(jié)構(gòu)組成了關(guān)系數(shù)據(jù)庫的內(nèi)模式,其物理結(jié)構(gòu)對(duì)最終用戶是隱蔽的。
3.2 數(shù)據(jù)庫實(shí)例
圍繞如下數(shù)據(jù)庫定義:
3.3 數(shù)據(jù)定義
關(guān)系數(shù)據(jù)庫系統(tǒng)支持三級(jí)模式結(jié)構(gòu),其模式、外模式和內(nèi)模式中的基本對(duì)象有模式、表、視圖和索引等。
一個(gè)關(guān)系數(shù)據(jù)庫管理系統(tǒng)的實(shí)例中可以建立多個(gè)數(shù)據(jù)庫,一個(gè)數(shù)據(jù)庫中可以建立多個(gè)模式,一個(gè)模式下包含多個(gè)表、視圖和索引等數(shù)據(jù)庫對(duì)象。下文中的語句<>括號(hào)中的為輸入內(nèi)容,[]括號(hào)內(nèi)的是可選內(nèi)容
3.3.1 模式的定義和刪除
模式定義語句如下:
CREATE SCHEMA <SCHEMA NAME> AUTHORIZATION <USER NAME> [<TABLE DEFINE>|<VIEW DEFINE>]
創(chuàng)建模式需要擁有數(shù)據(jù)庫管理員權(quán)限,或者獲得了數(shù)據(jù)庫管理員授予的CREATE SCHEMA權(quán)限。在創(chuàng)建模式的時(shí)候也可以執(zhí)行創(chuàng)建基本表、視圖等語句。定義模式實(shí)際上定義了一個(gè)命名空間,在這個(gè)空間中可以進(jìn)一步定義該模式包含的數(shù)據(jù)庫對(duì)象,比如基本表、視圖、索引等。從語句可以看出,定義模式的同時(shí)需要將該模式的管理權(quán)限授權(quán)給某用戶。
刪除模式語句如下:
DROP SCHEMA <SCHEMA NAME\88888>
<CASCADE|RESTRICT>
其中CASCADE和RESTRICT兩者必選其一,CASCADE(級(jí)聯(lián))表示刪除該模式的同時(shí)將模式中所有數(shù)據(jù)庫對(duì)象都刪除,RESTRICT(限制)指的是如果模式中定義了下屬的數(shù)據(jù)庫對(duì)象,則拒絕執(zhí)行刪除語句,除非該模式?jīng)]有下屬的對(duì)象。
3.3.1 模式的定義和刪除
模式定義語句如下:
CREATE SCHEMA <SCHEMA NAME> AUTHORIZATION <USER NAME> [<TABLE DEFINE>|<VIEW DEFINE>]
創(chuàng)建模式需要擁有數(shù)據(jù)庫管理員權(quán)限,或者獲得了數(shù)據(jù)庫管理員授予的CREATE SCHEMA權(quán)限。在創(chuàng)建模式的時(shí)候也可以執(zhí)行創(chuàng)建基本表、視圖等語句。定義模式實(shí)際上定義了一個(gè)命名空間,在這個(gè)空間中可以進(jìn)一步定義該模式包含的數(shù)據(jù)庫對(duì)象,比如基本表、視圖、索引等。從語句可以看出,定義模式的同時(shí)需要將該模式的管理權(quán)限授權(quán)給某用戶。
刪除模式語句如下:
DROP SCHEMA <SCHEMA NAME\88888>
<CASCADE|RESTRICT>
其中CASCADE和RESTRICT兩者必選其一,CASCADE(級(jí)聯(lián))表示刪除該模式的同時(shí)將模式中所有數(shù)據(jù)庫對(duì)象都刪除,RESTRICT(限制)指的是如果模式中定義了下屬的數(shù)據(jù)庫對(duì)象,則拒絕執(zhí)行刪除語句,除非該模式?jīng)]有下屬的對(duì)象。
3.3.2 基本表的定義、刪除和修改
1. 常見數(shù)據(jù)類型
2.定義基本表
定義基本表的格式如下:
CREATE TABLE <TABLE NAME> (
<列名><數(shù)據(jù)類型>[列完整性約束條件],
[<列名><數(shù)據(jù)類型>[列完整性約束條件],…]
[表完整性約束條件]
)
其中主要的列完整性約束條件有:
- PRIMARY KEY 主鍵
- FOREIGN KEY (外碼名) REFERENCES 被參照表(被參照列) 外鍵
- NOT NULL 非空
- UNIQUE 唯一值
3.修改基本表
ALTER TABLE <TABLE NAME>
[ADD [COLUME] <新列名><數(shù)據(jù)類型>[完整性約束]] -- 新增表項(xiàng)
[ADD <表級(jí)完整性約束>] -- 增加表約束
[DROP [COLUME] <列名> [CASCADE|RESTRICT]] -- 刪除表項(xiàng)
[DROP CONSTRAINT <完整性約束名> [RESTRICT|CASCADE]] -- 刪除表約束
[ALTER COLUME <列名><數(shù)據(jù)類型>] -- 修改列數(shù)據(jù)類型
其中ADD用于新增內(nèi)容,DROP用于刪除內(nèi)容。DROP COLUMN用于刪除列,如果指定了CASCADE則會(huì)在刪除列之前先刪除引用該列的其他對(duì)象,比如視圖;如果指定了RESTRICT,則如果對(duì)象被引用,則RDBMS會(huì)拒絕刪除該列。DROP CONSTRAINT 用于刪除指定的完整性約束條件。ALTER COLUMN子句用于修改原有列的定義。
4.刪除基本表
DROP TABLE <表名> [RESTRICT|CASCADE]
如果是RESTRICT,則刪除是有約束條件的,基本表不能被其他表的約束所引用(比如外鍵),不能有視圖,也不能有觸發(fā)器,不能有存儲(chǔ)過程或者函數(shù)。如果有則刪除失敗。如果選擇CASCADE,則該表刪除沒有限制條件,刪除基本表的同時(shí)相關(guān)的依賴一并刪除。
5.模式和表
一個(gè)模式包含了多個(gè)基本表,每一個(gè)基本表都屬于一個(gè)模式,當(dāng)定義一個(gè)基本表的時(shí)候有三種方法定義它所屬的模式:
方法一:在表名中明顯給出模式名
CREATE TABLE “S-T”.Student(…) -- Student的模式是S-T
方法二:在創(chuàng)建模式語句中同時(shí)創(chuàng)建表
方法三,設(shè)置所屬模式,在創(chuàng)建表時(shí)不需要給出模式名
使用語句
SHOW search_path
可以顯示當(dāng)前的搜索路徑
6.索引的建立和刪除
當(dāng)表的數(shù)據(jù)量比較大的時(shí)候,查詢操作會(huì)比較耗時(shí),因此建立索引可以加快查詢速度。數(shù)據(jù)庫索引類似于圖書的目錄,能夠快速定位到需要查詢的內(nèi)容。數(shù)據(jù)庫索引會(huì)有多種類型,包括順序文件上的索引、B+樹索引、散列索引等等。索引雖然會(huì)加速查詢速度,但是需要占用一定內(nèi)存空間,當(dāng)基本表更新的時(shí)候,索引也要做出變更,因此需要一些維護(hù)開銷。一般來說,建立和刪除索引由索數(shù)據(jù)庫管理員或者表的屬主(owner)負(fù)責(zé)完成。關(guān)系數(shù)據(jù)庫管理系統(tǒng)在執(zhí)行查詢時(shí)會(huì)自動(dòng)選擇合適的索引,用戶不能顯式選擇索引。索引是關(guān)系數(shù)據(jù)庫內(nèi)部實(shí)現(xiàn)技術(shù),屬于內(nèi)模式范疇。
常見索引形式
- 順序文件索引是針對(duì)按照指定屬性值升序或者降序的存儲(chǔ)關(guān)系。
- B+樹索引是將索引屬性組織成B+樹的形式,B+樹的葉節(jié)點(diǎn)為屬性值和相應(yīng)的元組指針。B+樹具有動(dòng)態(tài)平衡的優(yōu)點(diǎn)
- 散列索引是建立若干個(gè)同,將索引屬性按照其散列函數(shù)映射到相應(yīng)的桶中
- 位圖索引是用位向量記錄索引屬性中可能出現(xiàn)的值,每一個(gè)位向量對(duì)應(yīng)一個(gè)可能值。
建立索引
在SQL語句中,建立索引語句如下:
CREATE [UNIQUE] [CLUSTER] INDEX 索引名
ON <表名>(<列名>[<次序>] [, <列名>[<次序>]])
表名是基本表名字,
索引可與建立在該表的一列或者多列上,各列之間用逗號(hào)分隔,次序字段可選ASC(升序)和DESC(降序)
UNIQUE指該索引每一個(gè)索引值對(duì)應(yīng)唯一的數(shù)據(jù)記錄;CLUSTER指建立聚簇索引,聚簇索引會(huì)在后面介紹到文章來源:http://www.zghlxwxcb.cn/news/detail-749040.html
修改和刪除文章來源地址http://www.zghlxwxcb.cn/news/detail-749040.html
ALTER INDEX <舊索引名> RENAME TO <新索引名>
DROP INDEX <索引名>
到了這里,關(guān)于【數(shù)據(jù)庫概論】第三章 SQL簡述、數(shù)據(jù)定義和索引的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!