標籤:
資料庫中主要的部分是不同的表,在SQL語句中提供了一些對於表的操作。我們討論的操作都是在SQL SERVICE中的
一、建立表:
建立表的文法格式為:CREATE TABLE 表名(列名 資料類型[完整性條件約束條件], 列名 資料類型 [完整性條件約束條件],...);其中完整性條件約束條件可以添加也可以不加,如果不加也可以在表定義完成後另外在添加,比如我們現在需要建立一個學生表,可以使用這樣的代碼來建立:
create table student(Sno char(10) PRIMARY KEY, Sname char(20), SSex char(2) UNIQUE, Sage int, Sdept char(20) );
PRIMARY KEY表示將Sno做為這個表的主碼;
另外除了這種形式的約束條件,還有一種表級約束條件,表級約束條件一般都放在表的所有屬性之後定義,當某個屬性是外碼或者某個主屬性由多個屬性群組成時,外碼定義的格式一般為:FOREIGN KEY (作為外碼的屬性) 所引用的表 (被引用的屬性名稱);外碼的例子如下:
REATE TABLE Course(Cno char(4) PRIMARY KEY, Cname CHAR(20), Cpno char(4),--注意做外碼時資料類型要與被引用的資料類型相同 Ccredit smallint, FOREIGN KEY (Cpno) REFERENCES Course(Cno)--Cpno引用本表中的Cno
);
當有主碼中包含多個屬性時,主碼的定義格式為:PRIMARY KEY (屬性列,屬性列,...)
比如現在我們有一個成績表,表中課程號和學號為主碼,並且學號引用學生表中的學號,課程號引用的是課程表中的課程號:
CREATE TABLE SC( Sno char(10), Cno char(4), Grade smallint, PRIMARY KEY(Sno, Cno),--表中有多個主碼時必須使用表級約束條件 FOREIGN KEY (Sno) REFERENCES student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) );
其中每個屬性的取值範圍稱作域,我們可以根據實際情況定義出屬性的域,根據域選擇合適的資料類型,下面的表展示了主要的幾種資料類型:
| 資料類型 |
含義 |
| CHAR(n) |
長度為n的字串,所佔記憶體固定,但是只顯示使用者儲存的字元個數 |
| VARCHAR(n) |
最大長度為n的字串,記憶體根據使用者定義的字串的長度來確定 |
| INT |
整型 |
| SMALLINT |
短整型 |
| NUMBER(p, d) |
小數,總位元為p(包括小數部分但是不包括小數點),小數位元為d |
| REAL |
浮點數,取決於機器的浮點數精度 |
| Double Precision |
雙進度浮點數,位元也取決於機器位元 |
| FLOAT(n) |
浮點數進度至少為n |
| DATA |
日期,包含年、月、日。格式為YYYY-MM-DD |
| TIME |
時間,包含時、分、秒。格式為HH:MM:SS |
二、表定義的修改:
當我們定義好了一個表後,可能根據具體的需求變化需要更改表的定義,SQL同樣提供了相關的操作,SQL一般用ALTER TABLE 語句修改,其格式如下:
ALTER TABLE 表名
[ADD 新列名 資料類型 [完整性條件約束條件]] //新增列
[DROP <完整性條件約束條件>]//刪除某個完整性條件約束條件
[ALTER COLUMN <新列名><資料類型>]修改列
[DROP COLUMN <列名>]//刪除某一屬性
這些語句只能修改表結構,不能修改表中的資料,比如學號為00001,當我們將學號的一列的列名改為學生證號,這個00001不會改變。
下面是幾個小例子:
ALTER TABLE student add Sentrance DATE;--向學生表中添加一個入學時間的選項ALTER TABLE Course ADD UNIQUE(Cname);--向課程表中添加一個完整性條件約束條件ALTER TABLE student DROP COLUMN Sentrance;--刪除學生表中的入學時間選項
三、刪除表:
刪除表用到的語句為DROP TABLE 表名[RESTRICT | CASCADE]
其中選用RESTRICT選項時,刪除表是有條件的,被刪除的表不能被其他表的約束引用(CHECK FOREIGN KEY等約束),不能有視圖、索引、觸發器、預存程序
選用CASCADE時不關心這些限制條件,會將這些一併刪除。
SQL語句中的表操作