(数据库系统概论|王珊)第三章关系数据库标准语言SQL-第二、三节:数据定义
文章目錄
- 零:有關說明
- (1)安裝數據庫與建表
- (2)一些語法說明
- 一:模式的定義和刪除(SCHEMA)
- (1)定義模式
- (2)刪除模式
- 二:基本表的定義、刪除和修改(TABLE)
- (1)定義基本表
- (2)修改基本表
- (3)刪除基本表
- 三:索引的建立與刪除(INDEX)
- (1)建立索引
- (2)修改索引
- (3)刪除索引
零:有關說明
(1)安裝數據庫與建表
- 關于數據庫如何安裝,表如何建立這里不再介紹,請移步:(數據庫系統概論|王珊)第三章關系數據庫標準語言SQL-第零節:MYSQL環境安裝和表的建立以及一些注意事項
- 所用表為(上面文章中也有完整代碼):
(2)一些語法說明
由于我們使用的MYSQL所以有些語法和可能和SQL標準有所差異,甚至無法實現,總結如下
①:關于語法中的括號
- <>:尖括號用于分隔字符串
- []:方括號表示規則中的可選元素,可以選擇也可以省略
- {}:花括號表示聚集規則中的元素,必須明確指定
②:其它
- 在SQLserver中我們可以用 CREATE DATABASE來創建數據庫,而用CREATE SCHEMA來創建架構。但是在MYSQL中兩者是同等作用的,可以認為沒有區別。所以下面介紹時沒有實際的演示例子
- 在MYSQL中字符串用的不是單引號,而是``(鍵盤上數字1左邊的那個)
- 在MYSQL中創建模式時是沒有后面的AUTHROIZATION <用戶名>的
- MYSQL中大小寫均可行
回歸正題,SQL的數據定義主要包括以下內容
- 模式定義
- 表定義
- 視圖定義
- 索引定義
- 注意修改視圖和修改模式時只能刪除重建
一:模式的定義和刪除(SCHEMA)
注意:在SQLserver中我們可以用 CREATE DATABASE來創建數據庫,而用CREATE SCHEMA來創建架構。但是在MYSQL中兩者是同等作用的,可以認為沒有區別。所以下面介紹時沒有實際的演示例子
(1)定義模式
語法:CREATE SCHEMA <模式名> AUTHORIZATION <用戶名>(注意上面語法說明)
- 如果沒有指定 <模式名>, 那么<模式名>隱含為<用戶名>
- 定義模式本質是定義了一個命名空間
- 創建模式的同時也可以創建其它東西:CREATE SCHEMA <模式名> AUTHORIZATION <用戶名> [<表定義子句> | <視圖定義子句> | <授權定義子句>]
(2)刪除模式
語法:DROP SCHEMA <模式名><CASCADE|RESTRICT>(注意上面語法說明)
- CASCADE:表示級聯,也即刪除模式時會刪除該模式中所有數據庫對象
- RESTRICT:表示限制,也即在刪除時如果該模式下定義了其它對象,則拒絕
二:基本表的定義、刪除和修改(TABLE)
(1)定義基本表
語法:
- 建表的同時通常還可以定義與該表有關的完整性約束條件(參照前幾節內容)
- 如果完整性約束條件涉及該表的多個屬性列,則必須定義在表級上,否則既可以在列級上也可以在表級上
演示:
【例1】:建立學生表Student,其中Sno是主碼,且Sname不能重復
【例2】:建立課程表Course,其中Cno是主碼,Cname不能取空值,Cpno代表先修課(意思是學習該課前必須先學習某個課程),它是外碼,需要參照本表,參照列為Cno
【例3】:建立學生選課表SC,其中Sno和Cno是外碼,分別參照Student表的Sno列和Course表的Cno列
- Sno和Cno是SC的主碼,必須使用表級完整性定義
(2)修改基本表
語法:
- ADD:用于增加新列,新的列級完整性約束條件和新的表級完整性約束條件
- DROP COLUMN:用于刪除表中的列
- DROP CONSTRAINT:用于刪除指定的完整性約束條件
- ALTER COLUMN:用于修改原有的列定義
演示:
【例4】:向Student表中增加“入學時間”列,數據類型為“日期型”
ALTER TABLE Student ADD Sentrance DATE;
【例5】:將Student表“年齡”這一列的數據類型由改為 INT
【例6】:Course表中的Cname必須取唯一值
ALTER TABLE Course ADD UNIQUE(Cname);【例7】:刪除Student表中的“入學時間”列
ALTER TABLE Student DROP COLUMN Sentrance CASCADE;
【例8】:刪除Course表中Cname的唯一約束
- 此部分看完這個就明白了:(數據庫系統概論|王珊)第五章數據庫完整性-第四、六、七節:約束命名子句、斷言和觸發器
MYSQL在刪除約束時有一些不一樣,請點擊查看:鏈接
(3)刪除基本表
語法:
- 選擇RESTRICT:欲刪除的基本表不能被其他表的約束所引用(比如CHECK、FOREIGN KEY等)、不能有視圖、不能有觸發器(trigger),不能有存儲過程或函數等
- 選擇CASCADE:沒有限制條件,所有相關依賴對象連同基本表一起刪除
演示:
【例9】:刪除Student表,使用RESTRICT
- 由于SC表參照的是Student,所以刪除不成功
三:索引的建立與刪除(INDEX)
當表的數據量較大時,查詢操作就會十分耗時。建立索引是加快查詢速度的有效手段
- 數據庫索引類似于圖書后面的索引,能快速定位需要查詢的內容
用戶可以根據應用環境的需要在基本表上建立一個或多個索引,類型有
- 順序文件上的索引
- B+樹索引
- 散列索引
- 位圖索引
索引雖然能加快查詢速度,但也有缺點
- 需要占用一定的存儲空間
- 會提高查詢速度但是會降低更新速度
(1)建立索引
語法:
- <表名>:要建立索引的基本表的名字
- 索引可以建立在該表的一列或多列上,各列之間使用逗號分隔
- 每個<列名>后面還可以用<次序>指定索引值的排列次序,可選ASC-升序(默認)或DESC-降序
- UNIQUE:表明此索引的每一個索引值只對應唯一的數據記錄
- CLUSTER:表示需要建立聚簇索引(第七章會講到)
演示:
【例10】:請按以下要求建立索引
- Student表按學號升序建立唯一索引
- Course表按課程號升序建立唯一索引
- SC表按學號升序和課程號降序建立唯一索引
(2)修改索引
語法:
演示:
【例11】:將SC表的SCno索引改名為SCSno
ALTER INDEX SCno RENAME TO SCSno(3)刪除索引
語法:
演示:
【例12】:刪除SC表的SCSno索引
總結
以上是生活随笔為你收集整理的(数据库系统概论|王珊)第三章关系数据库标准语言SQL-第二、三节:数据定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebService 的创建,部署和使用
- 下一篇: 51单片机之中断系统