笔记:SQL概述及数据定义(模式SCHEMA、表TABLE、索引INDEX)
?SQL概述及數(shù)據(jù)定義(模式SCHEMA、表TABLE、索引INDEX)的學(xué)習(xí)筆記。修改與補(bǔ)充
目錄
0.前言
1.思維導(dǎo)圖
2.SQL概述
(1)什么是SQL?
(2)SQL的特點(diǎn)
(3) SQL的基本概念
3.數(shù)據(jù)字典
4.數(shù)據(jù)定義
(1)數(shù)據(jù)定義概覽
?(2)模式的定義與刪除—SCHEMA
?(3)基本表的定義、刪除與修改—TABLE
(4)索引的建立與刪除—INDEX?
0.前言
- 此文章是根據(jù)《數(shù)據(jù)庫(kù)系統(tǒng)概論》王珊老師編寫的教材做的筆記和總結(jié),關(guān)于用到的表在另一篇文章里面《數(shù)據(jù)庫(kù)系統(tǒng)概論》之?dāng)?shù)據(jù)查詢—SELECT(單表查詢、連接查詢、嵌套查詢、集合查詢、多表查詢)
- 數(shù)據(jù)庫(kù)是SQL Sever
- 數(shù)據(jù)庫(kù)管理系統(tǒng)是Navicat Premium 15
1.思維導(dǎo)圖
2.SQL概述
(1)什么是SQL?
- SQL(Structured Query Language)結(jié)構(gòu)化查詢語言,是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語言
- SQL是一個(gè)通用的、功能極強(qiáng)的關(guān)系數(shù)據(jù)庫(kù)語言
(2)SQL的特點(diǎn)
① 綜合統(tǒng)一
- 集數(shù)據(jù)定義語言 DDL(Data Definition Language),數(shù)據(jù)操縱語言 DML(Data Manipulation Language),數(shù)據(jù)控制語言 DCL(Data Control Language) 功能于一體。
- 可以獨(dú)立完成數(shù)據(jù)庫(kù)生命周期中的全部活動(dòng):
- 定義關(guān)系模式,插入數(shù)據(jù),建立數(shù)據(jù)庫(kù);
- 對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行查詢和更新;
- 數(shù)據(jù)庫(kù)重構(gòu)和維護(hù)
- 數(shù)據(jù)庫(kù)安全性、完整性控制等
- 用戶數(shù)據(jù)庫(kù)投入運(yùn)行后,可根據(jù)需要隨時(shí)逐步修改模式,不影響數(shù)據(jù)的運(yùn)行。
- 數(shù)據(jù)操作符統(tǒng)一
② 高度非過程化
- 非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操縱語言“面向過程”,必須制定存取路徑
- SQL只要提出“做什么”,無須了解存取路徑。
- 存取路徑的選擇以及SQL的操作過程由系統(tǒng)自動(dòng)完成。
③ 面向集合的操作方式
- 非關(guān)系數(shù)據(jù)模型采用面向記錄的操作方式,操作對(duì)象是一條記錄
- SQL采用集合操作方式:
- 操作對(duì)象、查找結(jié)果可以是元組的集合
- 一次插入、刪除、更新操作的對(duì)象可以是元組的集合
④ 以同一種語法結(jié)構(gòu)提供多種使用方式
- SQL是獨(dú)立的語言
- 能夠獨(dú)立地用于聯(lián)機(jī)交互的使用方式
- SQL又是嵌入式語言
- SQL能夠嵌入到高級(jí)語言(例如C,C++,Java)程序中,供程序員設(shè)計(jì)程序時(shí)使用
⑤ 語言簡(jiǎn)潔,易學(xué)易用
- SQL功能極強(qiáng),完成核心功能只用了9個(gè)動(dòng)詞。
(3) SQL的基本概念
- SQL支持關(guān)系數(shù)據(jù)庫(kù)三級(jí)模式結(jié)構(gòu)
視圖
- 從一個(gè)或幾個(gè)基本表導(dǎo)出的表
- 數(shù)據(jù)庫(kù)中只存放視圖的定義而不存放視圖對(duì)應(yīng)的數(shù)據(jù)
- 視圖是一個(gè)虛表
- 用戶可以在視圖上再定義視圖
基本表
- 本身獨(dú)立存在的表
- SQL中一個(gè)關(guān)系就對(duì)應(yīng)一個(gè)基本表
- 一個(gè)(或多個(gè))基本表對(duì)應(yīng)一個(gè)存儲(chǔ)文件
- 一個(gè)表可以帶若干索引
存儲(chǔ)文件
- 邏輯結(jié)構(gòu)組成了關(guān)系數(shù)據(jù)庫(kù)的內(nèi)模式
- 物理結(jié)構(gòu)是任意的,對(duì)用戶透明
數(shù)據(jù)庫(kù)的三級(jí)模式?
數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)結(jié)構(gòu)是三級(jí)模式結(jié)構(gòu),它包括外模式、概念模式、內(nèi)模式。
- 外模式,又稱用戶模式,對(duì)應(yīng)于用戶級(jí)。它是某個(gè)或某幾個(gè)用戶所看到的數(shù)據(jù)庫(kù)的數(shù)據(jù)視圖,含模式中允許特定用戶使用的那部分?jǐn)?shù)據(jù)。
- 概念模式,它是由數(shù)據(jù)庫(kù)設(shè)計(jì)者綜合所有用戶的數(shù)據(jù),包含基本表,按照統(tǒng)一的觀點(diǎn)構(gòu)造的全局邏輯結(jié)構(gòu),是對(duì)數(shù)據(jù)庫(kù)中全部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的總體描述。
- 內(nèi)模式又稱存儲(chǔ)模式,對(duì)應(yīng)于物理級(jí)。它是數(shù)據(jù)庫(kù)中全體數(shù)據(jù)的內(nèi)部表示或底層描述,包含存儲(chǔ)文件,描述了數(shù)據(jù)在存儲(chǔ)介質(zhì)上的存儲(chǔ)方式和物理結(jié)構(gòu),對(duì)應(yīng)著實(shí)際存儲(chǔ)在外存儲(chǔ)介質(zhì)上的數(shù)據(jù)庫(kù)。
3.數(shù)據(jù)字典
- 數(shù)據(jù)字典是關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)內(nèi)部的一組系統(tǒng)表,它記錄了數(shù)據(jù)庫(kù)中所有的定義信息,包括關(guān)系模式定義、視圖定義、索引定義、完整性約束定義、各類用戶對(duì)數(shù)據(jù)庫(kù)的操作權(quán)限、統(tǒng)計(jì)信息等。
- 關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)在執(zhí)行SQL的數(shù)據(jù)定義語句時(shí),實(shí)際上就是在更新數(shù)據(jù)字典表中的相應(yīng)信息。
- 在進(jìn)行查詢優(yōu)化和查詢處理時(shí),數(shù)據(jù)字典中的信息是其重要依據(jù)。
4.數(shù)據(jù)定義
(1)數(shù)據(jù)定義概覽
- SQL的數(shù)據(jù)定義功能:?模式定義、表定義、視圖和索引的定義
?(2)模式的定義與刪除—SCHEMA
定義模式實(shí)際上定義了一個(gè)命名空間
- 在這個(gè)空間中可以定義該模式包含的數(shù)據(jù)庫(kù)對(duì)象,例如基本表、視圖、索引等。
- 在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。
- CREATE SCHEMA <模式名> AUTHORIZATION <用戶名>[<表定義子句>|<視圖定義子句>|<授權(quán)定義子句>]
- 如果沒有指定<模式名>,那么<模式名>隱含為<用戶名>
?① 給用戶分配定義模式
dbo database owner 數(shù)據(jù)庫(kù)的創(chuàng)建者,創(chuàng)建該對(duì)象的用戶. guest 顧客 能夠訪問數(shù)據(jù)庫(kù)中對(duì)象的數(shù)據(jù), 要求dbo分配權(quán)限給guest, 一般給他查看的權(quán)限select
這里我先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)用戶:
?[例1]定義一個(gè)學(xué)生-課程模式S-T
CREATE SCHEMA "S-T" AUTHORIZATION BitHachi;為用戶BitHachi定義了一個(gè)模式S-T- 如果沒有指定<模式名>,那么<模式名>隱含為<用戶名>
?[例2]為用戶BitHachi創(chuàng)建了一個(gè)模式S-T,并在其中定義了一個(gè)表TAB1。
CREATE SCHEMA "S-T" AUTHORIZATION BitHachi CREATE TABLE TAB1( COL1 SMALLINT, COL2 INT, COL3 CHAR(20), COL4 NUMERIC(10,3), COL5 DECIMAL(5,2) );② 刪除模式?
- DROP SCHEMA <模式名> <CASCADE|RESTRICT>
- CASCADE(級(jí)聯(lián))
刪除模式的同時(shí)把該模式中所有的數(shù)據(jù)庫(kù)對(duì)象全部刪除 - RESTRICT(限制)
如果該模式中定義了下屬的數(shù)據(jù)庫(kù)對(duì)象(如表、視圖等),則拒絕該刪除語句的執(zhí)行。 - 當(dāng)該模式中沒有任何下屬的對(duì)象時(shí)才能執(zhí)行。
- 以下是運(yùn)行結(jié)果,至于為什么是錯(cuò)誤的,暫且放在這里,等熟悉相關(guān)知識(shí)之后,再來解決。
?(3)基本表的定義、刪除與修改—TABLE
① 定義基本表的標(biāo)準(zhǔn)格式
CREATE TABLE <表名>(<列名> <數(shù)據(jù)類型>[ <列級(jí)完整性約束條件> ][,<列名> <數(shù)據(jù)類型>[ <列級(jí)完整性約束條件>] ]………[,<表級(jí)完整性約束條件> ]);- 如果完整性約束條件涉及到該表的多個(gè)屬性列,則必須定義在表級(jí)上,否則既可以定義在列級(jí)也可以定義在表級(jí)。
② 數(shù)據(jù)類型
-
SQL中域的概念用數(shù)據(jù)類型來實(shí)現(xiàn)
-
定義表的屬性時(shí) 需要指明其數(shù)據(jù)類型及長(zhǎng)度
-
選用哪種數(shù)據(jù)類型
- 取值范圍
- 要做哪些運(yùn)算
-
以下是通用數(shù)據(jù)類型,不同數(shù)據(jù)庫(kù)的數(shù)據(jù)類型可能有所不同,可查相關(guān)文檔。
③ 修改基本表?
ALTER TABLE <表名> [ ADD <新列名> <數(shù)據(jù)類型> [ 完整性約束 ] ] [ DROP <完整性約束名> ] [ ALTER COLUMN<列名> <數(shù)據(jù)類型> ];[例8]向Student表增加“入學(xué)時(shí)間”列,其數(shù)據(jù)類型為日期型。
- 不論基本表中原來是否已有數(shù)據(jù),新增加的列一律為空值。 ALTER TABLE Student ADD S_entrance DATE;
[例9]將年齡的數(shù)據(jù)類型由字符型(假設(shè)原來的數(shù)據(jù)類型是字符型)改為整數(shù)。?
ALTER TABLE Student ALTER COLUMN Sage INT;④ 刪除基本表
標(biāo)準(zhǔn)格式:
DROP TABLE <表名>[RESTRICT| CASCADE];
- RESTRICT:刪除表是有限制的。
- 欲刪除的基本表不能被其他表的約束所引用
- 如果存在依賴該表的對(duì)象,則此表不能被刪除
- CASCADE:刪除該表沒有限制。
- 在刪除基本表的同時(shí),相關(guān)的依賴對(duì)象一起刪除
[例11] 刪除Student表
- 基本表定義被刪除,數(shù)據(jù)被刪除
- 表上建立的索引、視圖、觸發(fā)器等一般也將被刪除
- 還是和上述刪除模式情況一樣,加了CASCADE和RESTRUCT刪除不了 DROP TABLE Student CASCADE ;
[例12]若表上建有視圖,選擇RESTRICT時(shí)表不能刪除?
CREATE VIEW IS_Student AS SELECT Sno,Sname,SageFROM StudentWHERE Sdept='IS';DROP TABLE Student RESTRICT;[例12]如果選擇CASCADE時(shí)可以刪除表,視圖也自動(dòng)被刪除
DROP TABLE Student CASCADE; --NOTICE: drop cascades to view IS_StudentSELECT * FROM IS_Student; --ERROR: relation " IS_Student " does not exist(4)索引的建立與刪除—INDEX?
建立索引的目的:·加快查詢速度·
-
誰可以建立索引?
- DBA 或 表的屬主(即建立表的人)
- DBMS一般會(huì)自動(dòng)建立以下列上的索引
- PRIMARY KEY
- UNIQUE
-
誰維護(hù)索引?
DBMS自動(dòng)完成 -
使用索引
DBMS自動(dòng)選擇是否使用索引以及使用哪些索引 -
RDBMS中索引一般采用B+樹、HASH索引來實(shí)現(xiàn)
- B+樹索引具有動(dòng)態(tài)平衡的優(yōu)點(diǎn)
- HASH索引具有查找速度快的特點(diǎn)
-
采用B+樹,還是HASH索引 則由具體的RDBMS來決定
-
索引是關(guān)系數(shù)據(jù)庫(kù)的內(nèi)部實(shí)現(xiàn)技術(shù),屬于內(nèi)模式的范疇
-
CREATE INDEX語句定義索引時(shí),可以定義索引是唯一索引、非唯一索引或聚簇索引
① 建立索引的標(biāo)準(zhǔn)格式?
語句格式
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);[例13]在Student表的Sname(姓名)列上建立一個(gè)聚簇索引
CREATE CLUSTERED INDEX StusnameON Student(Sname);- 在Student表的Sname(姓名)列上建立一個(gè)聚簇索引
- 在最經(jīng)常查詢的列上建立聚簇索引以提高查詢效率
- 一個(gè)基本表上最多只能建立一個(gè)聚簇索引
- 經(jīng)常更新的列不宜建立聚簇索引
[例14]為學(xué)生-課程數(shù)據(jù)庫(kù)中的Student,Course,SC三個(gè)表建 立索引。
- Student表按學(xué)號(hào)升序建唯一索引
- Course表按課程號(hào)升序建唯一索引
- SC表按學(xué)號(hào)升序和課程號(hào)降序建唯一索引 CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
??
② 刪除索引?
DROP INDEX <索引名> ON <表名>;
DROP INDEX <表名>.<索引名>;?
- 刪除索引時(shí),系統(tǒng)會(huì)從數(shù)據(jù)字典中刪去有關(guān)該索引的
描述。
[例15] 刪除Student表的Stusname索引
DROP INDEX Stusno ON Student;//等價(jià)DROP INDEX Student.Stusno;總結(jié)
以上是生活随笔為你收集整理的笔记:SQL概述及数据定义(模式SCHEMA、表TABLE、索引INDEX)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 瑞萨E1仿真器(R0E000010KCE
- 下一篇: 软件工程网络15个人阅读作业2(2015