创建、修改、删除表总结
一、创建表
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 ;