【數據庫】作業4——SQL練習1 - CREATE / DROP / ALTER


  1. 課本的【例3.1】~【例3.12】,在SQLserver上運行一遍。
  2. 注意比較標準SQL與T-SQL之間的不同。
  3. 做完實驗後,寫一下心得體會。

作業原地址:作業


需要使用:新建查詢,輸入語句,執行。

注:“√”(分析,快捷鍵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  <外鍵名>

 

如圖:

 

 

原文鏈接:https://blog.csdn.net/muyie/article/details/79829314?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158374482219726867814708%2522%252C%2522scm%2522%253A%252220140713.130056874..%2522%257D&request_id=158374482219726867814708&biz_id=0&utm_source=distribute.pc_search_result.none-task

 

【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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章