3.1 《数据库系统概论》SQL概述及数据定义(模式SCHEMA、表TABLE、索引INDEX)
文章目錄
- 0.前言
- 1.思維導圖
- 2.SQL概述
- (1)什么是SQL?
- (2)SQL的特點
- (3) SQL的基本概念
- 3.數據字典
- 4.數據定義
- (1)數據定義概覽
- (2)模式的定義與刪除---SCHEMA
- ① 定義模式
- ② 刪除模式
- (3)基本表的定義、刪除與修改---TABLE
- ① 定義基本表的標準格式
- ② 數據類型
- ③ 修改基本表
- ④ 刪除基本表
- (4)索引的建立與刪除---INDEX
- ① 建立索引的標準格式
- ② 刪除索引
0.前言
- 此文章是根據《數據庫系統概論》王珊老師編寫的教材做的筆記和總結,關于用到的表在我的另一篇文章里面《數據庫系統概論》之數據查詢—SELECT(單表查詢、連接查詢、嵌套查詢、集合查詢、多表查詢)
- 數據庫是SQL Sever
- 數據庫管理系統是Navicat Premium 15
1.思維導圖
2.SQL概述
(1)什么是SQL?
- SQL(Structured Query Language)結構化查詢語言,是關系數據庫的標準語言
- SQL是一個通用的、功能極強的關系數據庫語言
(2)SQL的特點
① 綜合統一
- 集數據定義語言 DDL(Data Definition Language),數據操縱語言 DML(Data Manipulation Language),數據控制語言 DCL(Data Control Language) 功能于一體。
- 可以獨立完成數據庫生命周期中的全部活動:
- 定義關系模式,插入數據,建立數據庫;
- 對數據庫中的數據進行查詢和更新;
- 數據庫重構和維護
- 數據庫安全性、完整性控制等
- 用戶數據庫投入運行后,可根據需要隨時逐步修改模式,不影響數據的運行。
- 數據操作符統一
② 高度非過程化
- 非關系數據模型的數據操縱語言“面向過程”,必須制定存取路徑
- SQL只要提出“做什么”,無須了解存取路徑。
- 存取路徑的選擇以及SQL的操作過程由系統自動完成。
③ 面向集合的操作方式
- 非關系數據模型采用面向記錄的操作方式,操作對象是一條記錄
- SQL采用集合操作方式:
- 操作對象、查找結果可以是元組的集合
- 一次插入、刪除、更新操作的對象可以是元組的集合
④ 以同一種語法結構提供多種使用方式
- SQL是獨立的語言
- 能夠獨立地用于聯機交互的使用方式
- SQL又是嵌入式語言
- SQL能夠嵌入到高級語言(例如C,C++,Java)程序中,供程序員設計程序時使用
⑤ 語言簡潔,易學易用
- SQL功能極強,完成核心功能只用了9個動詞。
| 數據查詢 | SELECT |
| 數據定義 | CREATE、DROP、ALTER |
| 數據操縱 | INSERT、UPDATE、DELETE |
| 數據控制 | GRANT、REVOKE |
(3) SQL的基本概念
- SQL支持關系數據庫三級模式結構
基本表
- 本身獨立存在的表
- SQL中一個關系就對應一個基本表
- 一個(或多個)基本表對應一個存儲文件
- 一個表可以帶若干索引
存儲文件
- 邏輯結構組成了關系數據庫的內模式
- 物理結構是任意的,對用戶透明
視圖
- 從一個或幾個基本表導出的表
- 數據庫中只存放視圖的定義而不存放視圖對應的數據
- 視圖是一個虛表
- 用戶可以在視圖上再定義視圖
3.數據字典
- 數據字典是關系數據庫管理系統內部的一組系統表,它記錄了數據庫中所有的定義信息,包括關系模式定義、視圖定義、索引定義、完整性約束定義、各類用戶對數據庫的操作權限、統計信息等。
- 關系數據庫管理系統在執行SQL的數據定義語句時,實際上就是在更新數據字典表中的相應信息。
- 在進行查詢優化和查詢處理時,數據字典中的信息是其重要依據。
4.數據定義
(1)數據定義概覽
- SQL的數據定義功能: 模式定義、表定義、視圖和索引的定義
(2)模式的定義與刪除—SCHEMA
定義模式實際上定義了一個命名空間
- 在這個空間中可以定義該模式包含的數據庫對象,例如基本表、視圖、索引等。
- 在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。
- CREATE SCHEMA <模式名> AUTHORIZATION <用戶名>[<表定義子句>|<視圖定義子句>|<授權定義子句>]
- 如果沒有指定<模式名>,那么<模式名>隱含為<用戶名>
① 定義模式
dbo database owner 數據庫的創建者,創建該對象的用戶. guest 顧客 能夠訪問數據庫中對象的數據, 要求dbo分配權限給guest, 一般給他查看的權限select
- 這里我先創建一個數據庫用戶:
[例1]定義一個學生-課程模式S-T
CREATE SCHEMA "S-T" AUTHORIZATION BitHachi;為用戶BitHachi定義了一個模式S-T- 如果沒有指定<模式名>,那么<模式名>隱含為<用戶名>
[例2]為用戶BitHachi創建了一個模式S-T,并在其中定義了一個表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(級聯)
刪除模式的同時把該模式中所有的數據庫對象全部刪除 - RESTRICT(限制)
如果該模式中定義了下屬的數據庫對象(如表、視圖等),則拒絕該刪除語句的執行。 - 當該模式中沒有任何下屬的對象時才能執行。
- 以下是運行結果,至于為什么是錯誤的,暫且放在這里,等熟悉相關知識之后,再來解決。
(3)基本表的定義、刪除與修改—TABLE
① 定義基本表的標準格式
CREATE TABLE <表名>(<列名> <數據類型>[ <列級完整性約束條件> ][,<列名> <數據類型>[ <列級完整性約束條件>] ]………[,<表級完整性約束條件> ]);- 如果完整性約束條件涉及到該表的多個屬性列,則必須定義在表級上,否則既可以定義在列級也可以定義在表級。
- 示例:
② 數據類型
-
SQL中域的概念用數據類型來實現
-
定義表的屬性時 需要指明其數據類型及長度
-
選用哪種數據類型
- 取值范圍
- 要做哪些運算
-
以下是通用數據類型,不同數據庫的數據類型可能有所不同,可查相關文檔。
③ 修改基本表
ALTER TABLE <表名> [ ADD <新列名> <數據類型> [ 完整性約束 ] ] [ DROP <完整性約束名> ] [ ALTER COLUMN<列名> <數據類型> ];[例8]向Student表增加“入學時間”列,其數據類型為日期型。
- 不論基本表中原來是否已有數據,新增加的列一律為空值。
[例9]將年齡的數據類型由字符型(假設原來的數據類型是字符型)改為整數。
ALTER TABLE Student ALTER COLUMN Sage INT;
[例10]增加課程名稱必須取唯一值的約束條件。
④ 刪除基本表
標準格式:
DROP TABLE <表名>[RESTRICT| CASCADE];
- RESTRICT:刪除表是有限制的。
- 欲刪除的基本表不能被其他表的約束所引用
- 如果存在依賴該表的對象,則此表不能被刪除
- CASCADE:刪除該表沒有限制。
- 在刪除基本表的同時,相關的依賴對象一起刪除
[例11] 刪除Student表
- 基本表定義被刪除,數據被刪除
- 表上建立的索引、視圖、觸發器等一般也將被刪除
- 還是和上述刪除模式情況一樣,加了CASCADE和RESTRUCT刪除不了 DROP TABLE Student CASCADE ;
[例12]若表上建有視圖,選擇RESTRICT時表不能刪除
CREATE VIEW IS_Student AS SELECT Sno,Sname,SageFROM StudentWHERE Sdept='IS';DROP TABLE Student RESTRICT;--ERROR: cannot drop table Student because other objects depend on it
[例12]如果選擇CASCADE時可以刪除表,視圖也自動被刪除
- 這里還是跟之前的情況一樣,刪除不了,可能是我用的數據庫不同叭
(4)索引的建立與刪除—INDEX
建立索引的目的:·加快查詢速度·
-
誰可以建立索引?
- DBA 或 表的屬主(即建立表的人)
- DBMS一般會自動建立以下列上的索引
- PRIMARY KEY
- UNIQUE
-
誰維護索引?
DBMS自動完成 -
使用索引
DBMS自動選擇是否使用索引以及使用哪些索引 -
RDBMS中索引一般采用B+樹、HASH索引來實現
- B+樹索引具有動態平衡的優點
- HASH索引具有查找速度快的特點
-
采用B+樹,還是HASH索引 則由具體的RDBMS來決定
-
索引是關系數據庫的內部實現技術,屬于內模式的范疇
-
CREATE INDEX語句定義索引時,可以定義索引是唯一索引、非唯一索引或聚簇索引
① 建立索引的標準格式
語句格式
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);[例13]
CREATE CLUSTERED INDEX StusnameON Student(Sname);- 在Student表的Sname(姓名)列上建立一個聚簇索引
- 在最經常查詢的列上建立聚簇索引以提高查詢效率
- 一個基本表上最多只能建立一個聚簇索引
- 經常更新的列不宜建立聚簇索引
[例14]為學生-課程數據庫中的Student,Course,SC三個表建 立索引。
- Student表按學號升序建唯一索引
- Course表按課程號升序建唯一索引
- SC表按學號升序和課程號降序建唯一索引
② 刪除索引
DROP INDEX <索引名> ON <表名>;
DROP INDEX <表名>.<索引名>;
- 刪除索引時,系統會從數據字典中刪去有關該索引的
描述。
[例15] 刪除Student表的Stusname索引
DROP INDEX Stusno ON Student;//等價DROP INDEX Student.Stusno;總結
以上是生活随笔為你收集整理的3.1 《数据库系统概论》SQL概述及数据定义(模式SCHEMA、表TABLE、索引INDEX)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4.3 计算机网络之IPv4(IPv4分
- 下一篇: 3.5 《数据库系统概论》之基本表更新(