1. 程式人生 > >SQL Server 2008 資料庫_實驗一_SQL DDL 操作

SQL Server 2008 資料庫_實驗一_SQL DDL 操作

SQL DDL 操作

什麼是SQL DDL 操作?
  DDL是SQL定義語言,它主要包括三個關鍵字:create ,alter , drop(資料庫關鍵字不分大小寫 ),主要操作物件 有資料庫、表、索引、檢視等。
  
語句說明:

建立資料庫   create database
修改資料庫   alter database
刪除資料庫   drop database
建立表     create table
修改表     alter table
刪除表     drop table
建立索引    create index
刪除索引    drop index

實驗的目的

  • 掌握建立資料庫和撤銷。
  • 掌握基本表的建立、修改和撤銷。
  • 掌握索引的建立和撤銷。

實驗內容與要求
利用SQL語句建立資料庫Lesson,並指定資料檔案和日誌檔案的儲存位置為E:\sqldata。
通過SQL語句建立以下基本表

  • 教師關係 T (T#, TNAME,TITLE)
  • 課程關係 C (C#,CNAME,T#)
  • 學生關係 S (S#,SNAME,AGE,SEX)
  • 選課關係 SC (S#,C# ,SCORE)
  • 班級關係CLASS(CLASSID,CLASSNAME)
  • 其中粗體為主鍵,劃線的屬性為外來鍵。
  1. 通過SQL語句在CLASS表的CLASSID列上建立聚集索引IDX_CLASSID
  2. 通過SQL語句建立在S#和C#兩個列上建立索引IDX_S#_C#,並指定索引按S#降序,C#升序有序。
  3. 通過SQL語句實現以下操作:
  • 撤銷索引IDX_CLASSID及IDX_S#_C#
  • 在學生關係中增加班級號屬性列CLASSID
  • 撤銷學生關係中的班級號屬性列CLASSID
  • 撤銷班級關係CLASS

實驗主要步驟

一、建立資料庫Lesson
在這裡插入圖片描述
在這裡插入圖片描述
原始碼:

create database Lesson	--建立lesson資料庫
on primary --主檔案組
(
	name = 'Lesson_data',	--主檔案邏輯檔名
	filename = 'd:\sql2008project\實驗一\資料庫和日誌檔案\Lesson_data.mdf'	--主檔案物理檔名(儲存路徑)
)
log on	--日誌檔案
(
	name = 'Lesson_log',	--日誌檔案邏輯檔名
	filename = 'd:\sql2008project\實驗一\資料庫和日誌檔案\Lesson_log.ldf'	--日誌檔案物理檔名(儲存路徑)
)
select * from sysdatabases --查詢資料庫建立記錄

建立資料庫後創新可見所建立的資料庫。

二、通過SQL語句建立基本表
在這裡插入圖片描述
原始碼:

Use Lesson --指向需要所操作的資料庫Lesson

 --建立教師關係表T
Create table T 
(
	T#    varchar(50) not null,--教師編號
	TNAME varchar(50) not null,--教師姓名
	TITLE varchar(50) not null,--所授課程
	primary key (T#)
);

--建立課程關係表C
Create table C  
(
	C#    varchar(50) not null, --課程編號
	CNAME varchar(50) not null, --課程姓名
	T#    varchar(50) not null, --教師編號
	primary key (C#)
);

--建立學生關係表S
Create table S  
(
	S#    varchar(50) not null, --學生編號
	SNAME varchar(50) not null, --學生姓名
	AGE   varchar(10) not null, --學生年齡
	SEX   varchar(10) not null, --學生性別
	primary key (S#)
);

 --建立選課關係表SC
Create table SC 
(
	S#    varchar(50) not null, --學生編號
	C#    varchar(50) not null, --課程編號
	SCORE varchar(50) not null  --學生分數
	primary key (S#,C#),
	foreign key (S#) references S (S#),
	foreign key (C#) references C (C#) 
);

--建立選課關係表CLASS
Create table CLASS 
(
	CLASSID    varchar(50) not null,--班級編號
	CLASSNAME  varchar(50) not null,--班級姓名
)

三、通過SQL語句在CLASS表的CLASSID列上建立聚集索引IDX_CLASSID
在這裡插入圖片描述
原始碼:

Use Lesson --指向需要所操作的資料庫Lesson
create clustered index IDX_CLASSID	--建立聚集索引
on CLASS(CLASSID)					--為某表某列建立索引

四、通過SQL語句建立在S#和C#兩個列上建立索引IDX_S#_C#,並指定索引按S#降序,C#升序有序。
在這裡插入圖片描述
原始碼:

Use Lesson --指向需要所操作的資料庫Lesson
create index IDX_S#_C# on S(S# desc)		--為學生關係表S的S#列建立降序索引
create index IDX_S#_C# on C(C# asc)			--為課程關係表C的C#列建立升序索引
create index IDX_S#_C# on SC(S# desc,C# asc)--為選課關係表SC的S#列建立降序索引,C#列建立升序索引

五、撤銷索引IDX_CLASSID及IDX_S#_C#
在這裡插入圖片描述
原始碼:

Use Lesson --指向需要所操作的資料庫Lesson
drop index S.IDX_S#_C#			--刪除學生關係表上的IIDX_S#_C#索引
drop index C.IDX_S#_C#			--刪除課程關係表上的IIDX_S#_C#索引
drop index SC.IDX_S#_C#		    --刪除選課關係表上的IIDX_S#_C#索引
drop index CLASS.IDX_CLASSID	--刪除班級關係表上的IDX_CLASSID索引

六、在學生關係中增加班級號屬性列CLASSID

在這裡插入圖片描述
原始碼:

Use Lesson --指向需要所操作的資料庫Lesson
alter table S add CLASSID varchar(50)

七、撤銷學生關係中的班級號屬性列CLASSID
在這裡插入圖片描述
原始碼:

Use Lesson --指向需要所操作的資料庫Lesson
alter table S drop column CLASSID 

八、撤銷班級關係CLASS
在這裡插入圖片描述
原始碼:

Use Lesson --指向需要所操作的資料庫Lesson
drop table CLASS --刪除班級關係表

至此,本實驗全部要求已完成!

關鍵語法介紹:

  1. 建庫
    create database 資料庫名
    on primary --主檔案組
    (
      name = ‘主檔案邏輯檔名’,
      filename = ‘主檔案物理檔名(儲存路徑)’ ,
      size = 主檔案初始大小(單位MB),
      maxsize = 主檔案增長的最大值(單位MB),
      filegrowth = 主檔案的增長率(單位MB或者%)
    )<此處可以繼續新增子檔案組>
    log on --日誌檔案
    (
      name = ‘日誌檔案邏輯檔名’,
      filename = ‘日誌檔案物理檔名(儲存路徑)’,
      size = 日誌檔案初始大小(單位MB),
      maxsize = 日誌檔案增長的最大值(單位MB),
      filegrowth = 日誌檔案的增長率(單位MB或者%)
    ) <此處可以繼續新增日誌檔案>

  2. 建表
    create table 表名
    (
      列名 資料型別 是否為空 等
    )

  3. 建立索引
    create [unique] [clustered] [nonclustered] index 索引名
    on 表名(列名 [desc][asc])為某表某列建立索引(降序/升序)

  4. 刪除索引
    drop index 表名.索引名

  5. 新增列
    alter table 表名 add 需要新增的列名 資料型別

  6. 刪除列
    alter table 表名 drop column 列名

  7. 刪除表
    drop table 表名

關鍵知識點

  1. 主鍵:
  • 表中一列或幾列組合的,能夠唯一的表示表中的每一行
  • 一個表只能有一個主鍵
  • 多列組合當主鍵稱為符合主鍵
  • 原則:最少性和唯一性
  1. 外來鍵
  • 相對於主鍵而言
  • 一個表可以有多個外來鍵
  1. 約束的型別
  • 主鍵約束:要求主鍵列不能為空,要求主鍵列唯一
  • 非空約束:要求列不能存在空值
  • 唯一約束:要求列的值必須是唯一的,允許為空,但只能出現一個空值
  • 檢查約朿:限制某列取值的範圍是否合適
  • 預設約束:設計列的預設值
  • 外健約束:用於在兩表之間建立關係,需要指定引用主表的哪一列

主健約束與唯一約束的區別:

  • 主鍵約束所在的列不允許有空值,唯一約束所在的列允許空值
  • 每個表中可以有一個主鍵,多個唯一鍵
  1. 索引
    索引:是SQL編排資料的內部方法,為SQL SERVER 提供一種方法來編排查詢資料

索引的分類:

  • 聚集索引:正文內容本身就是一種按照規定排列的目錄稱為 “聚集索引”。例如新華字典正文就是按照字母順序排序的,也可以說字典正文字身就是目錄,不需要檢視其它目錄去查詢,這就是聚集索引。
  • 非聚集索引:目錄純粹是目錄,正文純粹是正文的排序方式稱為“非聚集索引”。例如在新華字典查詢不知道讀音的字,那就需要使用偏旁部首來查詢,而在偏旁部首裡並沒有按照讀音來排序,會出現偏旁部首裡鄰近的兩個字,而在正文裡相差甚遠,像這樣目錄是目錄,內容是內容的方式就是非聚集索引。
  • 作用:大大提高資料庫的檢索速度,改善資料庫效能。

建立索引的一般原則:

  • 每個表只能建立一個聚集索引;
  • 每個表最多隻能建立一249個非聚集索引;
  • 在程序查詢的欄位上建立索引;
  • Text,Image和bit資料型別的列上不要建立索引;
  • 外來鍵列可以建立索引;
  • 主鍵列必須建立索引;
  • 重複值表較多,查詢較少的列上不要建立索引。

如有錯誤,歡迎指正!