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