一、創建表
CREATE TABLE? <表名>
(<列名><數據類型>[列級完整性約束條件]
? [,<列名> <數據類型>[列級完整性約束條件]]
???? …
? [,表級完整性約束條件]);
如果完整性約束條件涉及到該表的多個屬性列,則必須定義在表級上,否則既可以定義在列級也可以定義在表級
例句:
列級約束
create table student(
id int identity(1,1) primary key,
name varchar(20) not null,
sex? CHAR(2)
)
表級約束:Constraint為約束起名
CREATE TABLE Student
(Sno? CHAR(9) ,
Sname? varchar(20) ,
Ssex? CHAR(2) ,
Sage? SMALLINT,
Constraint PK_S PRIMARY KEY(Sno)
);
CREATE TABLE SC
?????????? (Sno?? CHAR(9)? NOT NULL,
??????????? Cno? CHAR(4)? NOT NULL,?
??????????? Grade??? INT,
Constraint PK_SC PRIMARY KEY (Sno,Cno)
);
列級unique約束
CREATE TABLE Student (
??? Sno?? CHAR(9) PRIMARY KEY,
??? Sname VARCHAR(20) Constraint UQ_s_sname UNIQUE,
??? Ssex??? CHAR(2),? Sage?? SMALLINT,
Sdept? CHAR(15)
);
?
CREATE TABLE Student
??????? (Sno? CHAR(9) PRIMARY KEY,
????????? Sname varchar(20) NOT NULL,????????????????????
????????? Ssex? CHAR(2) ,???????????????
????????? Sage? SMALLINT,
????????? Sdept? CHAR(15) ,
????????? UNIQUE(Sname),
????????? CHECK (Ssex IN (‘男’,‘女’) )
);
?
CREATE TABLE? Course
?(???? Cno ?char(4) ,
??????? Cname? varchar(40),???????????
??????? Cpno? char(4)? REFERENCES? Course(Cno) ,
??????? Ccredit? int,
??????? Primary Key(Cno)
?);
CREATE TABLE? SC
?????? (Sno? CHAR(9) REFERENCES Student(Sno) ,
?????? Cno? CHAR(4),?
?????? Grade INT DEFAULT 0,
?????? PRIMARY KEY (Sno,Cno),?
Constraint FK_sc_cno? foreign key (cno) references course(cno)
);
?二、約束類型
(1) PRIMARY KEY約束
(2)NULL/NOT NULL約束
(3)UNIQUE約束
(4) CHECK完整性約束
???????? 檢查字段值所允許的范圍
(5) FOREIGN KEY約束
(6)DEFAULT 約束
????????? 如果用戶在插入新行時沒有顯示為列提供數據,系統將默認值賦給該列
?
三、數據類型:
SQL中域的概念用數據類型來實現
數據類型 | 含義 |
CHAR(n) | 長度為n的定長字符串 |
VARCHAR(n) | 最大長度為n的變長字符串 |
INT | 長整數(也可以寫作INTEGER) |
SMALLINT | 短整數 |
NUMERIC(p,d) | 定點數,由p位數字(不包括符號、小數點)組成,小數后面有d位數字 |
REAL | 取決于機器精度的浮點數 |
Double Precision | 取決于機器精度的雙精度浮點數 |
FLOAT(n) | 浮點數,精度至少為n位數字 |
DATE | 日期,包含年、月、日,格式為YYYY-MM-DD |
TIME | 時間,包含一日的時、分、秒,格式為HH:MM:SS |
?
四、修改基本表
ALTER TABLE <表名>
??? [ADD <新列名><數據類型>[ <完整性約束定義]]
??? [ ADD? <表級完整性約束> ]
??? [ ALTER COLUMN<列名> <數據類型> ]]
??? [ DROP <完整性約束定義> ];
- 注意:
1. 使用ADD方式增加的新列自動填充NULL值,所以當表中有數據時增加的新列不能指定NOT NULL約束 。
例句:
向Student表增加“入學時間”列,其數據類型為日期型。
?ALTER TABLE Student ADD S_entrance Datetime; ?//加列
ALTER TABLE Student ALTER COLUMN Sage INT; ? //修改列
ALTER TABLE Course ADD UNIQUE(Cname); ? ? ?//加約束
- 表中有數據時:
????? Alter Table student ADD scome date default to_date('2008-01-01','yyyy-mm-dd');
?
五、刪除基本表
DROP TABLE <表名>[RESTRICT| CASCADE];
?1)?RESTRICT:刪除表是有限制的。
- 欲刪除的基本表不能被其他表的約束所引用
- 如果存在依賴該表的對象,則此表不能被刪除
?2) ?CASCADE:刪除該表沒有限制。
- 在刪除基本表的同時,相關的依賴對象一起刪除
例句:
DROP TABLE? Student? CASCADE ;
?