- 課本的【例3.1】~【例3.12】,在SQLserver上運行一遍。
- 注意比較標準SQL與T-SQL之間的不同。
- 做完實驗後,寫一下心得體會。
作業原地址:作業
需要使用:新建查詢,輸入語句,執行。
注:“√”(分析,快捷鍵ctrl+F5) ,執行前先分析,查看是否有錯誤語句。
新建數據庫:右鍵數據庫,新建數據庫“STU”。或輸入語句:
CREATE DATABASE STU;
新建用戶:點開安全性→右鍵用戶→新建用戶→輸入用戶名→選擇登錄名。
1.定義模式
語句:CREATE SCHEMA <模式名>AUTHORIZATION<用戶名>;
【3.1】爲用戶WANG定義一個學生-課程模式S-T。
CREATE SCHEMA "S-T" AUTHORIZATION WANG;
截圖:
————創建成功√。
注:查看是否已經存在用戶WANG,若沒有,則可以新建。
【3.2】CREATE SCHEMA AUTHORIZATION WANG;
該語句沒有指定<模式名>,所以<模式名>隱含爲用戶名WANG。
CREATE SCHEMA AUTHORIZATION WANG;
【3.3】爲用戶WANG創建了一個模式TEST,並且在其中定義一個表TAB1
CREATE SCHEMA TEST AUTHORIZATION WANG
CREATE TABLE TAB1 ( COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2),
);
截圖:
2.刪除模式
語句:DROP SCHEMA<模式名><CASCADE|RESTRICT>;
【3.4】DROP SCHEMA WANG CASCADE;
刪除模式ZHANG,同時該模式中定義的表TAB1也被刪除
DROP SCHEMA WANG CASCADE;
這裏出現了問題,向同學請教之後才明白,SQL Server不支持使用CASCADE/RESTRICT刪除,若刪除,可手動刪除或直接輸入語句
DROP SCHEMA WANG;
參考鏈接:https://blog.csdn.net/qq_38975453/article/details/104691601
3.基本定義表
SQL語言使用CREATE TABLE 語句定義基本表,其基本格式如下:
CREATE TABLE <表名>
(<列名> <數據類型>[ <列級完整性約束條件> ]
[,<列名> <數據類型>[ <列級完整性約束條件>] ]
…
[,<表級完整性約束條件> ] );
【3.5】新建一個“學生”表Student
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY, /* 列級完整性約束條件,Sno是主碼*/
Sname CHAR(20) UNIQUE, /* Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
截圖:
【3.6】 建立一個“課程”表Course。
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY, /*列表完整性約束條件,Cno是主碼*/
Cname CHAR(40)NOT NULL, /*列表完整性約束條件,Cname不能取空值*/
Cpno CHAR(4), /*Cpno的含義是先修課*/
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
/*表級完整性約束條件,Cpno是外碼,被參照表是Course,被參照列是Cno*/
);
截圖:
【3.7】建立學生選課表SC
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY (Sno,Cno), /*主碼由兩個屬性構成,必須作爲表級完整性進行定義*/
FOREIGN KEY (Sno) REFERENCES Student(Sno),
/*表級完整性約束條件,Sno是外碼,被參照表是Student*/
FOREIGN KEY (Cno)REFERENCES Course(Cno)
/*表級完整性約束條件,Cno是外碼,被參照表是Course*/
);
截圖:
4.修改基本表
SQL 語言用ALTER TABLE 語句修改基本表,其一般格式爲:
ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <數據類型> [ 完整性約束 ] ]
[ ADD <表級完整性約束>]
[ DROP [COLUMN] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性約束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><數據類型> ] ;
<表名>是要修改的基本表;
ADD 子句用於增加新列、新的列級完整性約束條件和新的表級完整性約束條件;
DROP COLUMN 子句用於刪除表中的列;
DROP CONSTRAINT 子句用於刪除指定的完整性約束條件;
ALTER COLUMN 子句用於修改原有的列定義,包括修改列名和數據類型。
注:
如果指定了CASCADE短語 ,則自動刪除引用了該列的其他對象,比如視圖;
如果指定了RESTRICT短語,則如果該列被其他對象引用,RDBMS將拒絕刪除該列。
【3.8】向Student表增加“入學時間”列,其數據類型爲日期型。
ALTER TABLE Student ADD S_entrance DATE;
截圖:
【3.9】將年齡的數據類型由字符型(假設原來的數據類型是字符型)改爲整數。
ALTER TABLE Student ALTER COLUMN Sage INT;
截圖:
修改成功,Sage爲int型
【3.10】增加課程名稱必須取唯一值的約束條件。
ALTER TABLE Course ADD UNIQUE(Cname);
截圖:
5.刪除基本表
使用DROP TABLE 語句刪除它,其一般格式爲:
DRIO TABLE <表名>RESTRICT | CASCADE];
默認情況是RESTRICT。
【3.11】刪除Student表
DROP TABLE Student CASCADE;
截圖:
這裏也出現了問題,情況與上述刪除模式相似。
但是按之前的方法刪除,會顯示錶被一個外鍵約束。
查找資料後,得到如下方法:
1.找出表中的外鍵約束,代碼如下:
select fk.name,fk.object_id,object_name(fk.parent_object_id) as referencetablename
from sys.foreign_keys as fk
join sys.objects as o on fk.referenced_object_id=o.object_id
where o.name = '<表名>'
如圖:
2.刪除外鍵約束,代碼如下:
alter table <表名> drop constraint <外鍵名>
如圖:
【3.12】若表上建有視圖,選擇RESTRICT時表不能刪除;選擇CASCADE時可刪除表,視圖自動被刪除 。
CREATE VIEW IS_Student /*Student表上建立視圖*/
AS
SELECT Cno,Cname
FROM Course
WHERE Ccredit='IS';
注:因爲Student表上例已經刪除,所以這個例子按步驟做了,但是沒有截圖。偷偷略過吧。
總結:通過12個例子,學到了一些基本的語句以及操作。期間碰到了刪除模式、刪除表的報錯問題,通過查找資料也得以解決。
目前所有操作都是照搬着書上的步驟來的,一些具體的方法、知識什麼的還沒有滲透,換句話說,按照例題的內容,我以及明白了,但是如果換到新的題的話,我可能還會蒙圈。可能也是接觸的新學科吧,這次作業足足做了2小時28分鐘,花了好長的時間。雖然這些可能都是簡單不能再簡單的知識,可能我理解新知識的能力還是欠缺,好多新知識我還要一點一點琢磨。
備註(2020.3.9):這條備註是新加的,這次作業應該也是週五(2020.3.8)和作業3一起上交的,因爲我個人的大意,不小心沒有成功提交這次作業,而且沒能及時發現,導致沒有按時交作業,已經向老師說明原因。
今天重新看一次這個作業,發現耗時真的太多了,知識還是要上課認真聽講,儘快理解,課下自己悟太費時間了。而且內容也稍有問題,我回顧了一下,大部分的時間應該都是用在截圖了吧,掃一眼有些截圖大可不用上傳,耗時間也冗篇幅,以後儘量修改。
作業3老師已經看完了,評分是B,回去看了一遍,emm,好像大多數都是書上定義的原話。我自己理解的話(嘴笨也不知道怎麼形容),不過每條定義都是我讀了幾遍一鍵一鍵敲上文章去的,腦力也能有個印象,至於自己理解的話,還是不清楚要怎麼描述。... 或者把思路寫上應該也可以,下次試試。
以上
————(2020.3.8)