表是数据库中非常重要的对象,它用于存储用户的数据。创建表就是定义表所包含的列的结构,其中包括列的名称、约束等。
一、基本表的定义和删除
1.定义基本表
一般格式如下:
Create Table <表名>(<列名> <数据类型> [列级完整性约束条件]
[,<列名> <数据类型> [列级完整性约束条件]...]
[,<表级完整性约束条件>]);
其中:
<表名>是所要定义的基本表的名字,最好能表达表的应用语义
<列名>是由一个或多个属性(列)组成。
建表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由dbms自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
下面我们以一个“学生-课程”数据库为例说明create语句的各种用法。
“学生-课程”数据库中包括三个表:
(1) “学生”表student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成,可记为: Student(Sno,Sname,Ssex,Sage,Sdept)
(2) “课程”表course由课程号(Cno)、课程名(Cname)、学期(Semster)、学分(Ccredit)、学时(Period)五个属性组成,可记为: Course(Cno,Cname,Semster,Ccredit,Period)
(3) “学生选课”表sc由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,可记为: Sc(Sno,Cno,Grade)
例1 建立一个“学生”表student,它由学号sno、姓名sname、性别ssex、年龄sage、所在系sdept五个属性组成,其中学号属性不能为空,并且其值是唯一的。
Create Table Student
( Sno Char(5) Primary Key,
Sname Char(20) Not Null,
Ssex Char(1) Check(Ssex=‘男’Or Ssex=‘女’),
Sage Tinyint Check(Sage>=15 And Sage<=45),
Sdept Char(20) Defalut ‘计算机系’
);
例2:建立课程表
Create Table Course
( Cno Char(10) Not Null,
Cname Char(20) Not Null,
Ccredit Tinyint Check(Ccredit>0)
Semester Tinyint Check(Semester>0),
Period Int Check(Period>0),
Primary Key(Cno)
);
例3:建立选课表,注意参照完整性
Create Table Sc
( Sno Char(7) Not Null,
Cno Char(10) Not Null,
Grade Tinyint Check (Grade>=10 And Grade<=100),
Primary Key (Sno,Cno),
Foreign Key (Sno) References Student (Sno),
Foreign Key (Cno) Referenced Course (Cno)
);
2. 删除表
删除表时会将与表有关的所有对象一起删掉。基本表定义一旦删除,表中的数据、在此表上建立的索引都将自动被删除掉,而建立在此表上的视图虽仍然保留,但已无法引用。因此执行删除操作一定要格外小心。
一般格式为:Drop Table <表名>
删除student表
Drop Table Student
二、 修改表结构
一般格式为:
Alter Table <表名>
[Alter <列名> <新数据类型> ]
[Add <新列名> <数据类型> [完整性约束]]
[Drop <完整性约束名> <完整性约束名>]
[Modify <列名> <数据类型> <数据类型>]
[Add Primary Key(列名)]
[Add Preign Key(列名) Referneces 表名(列名)];
其中<表名>指定需要修改的基本表,Add子句用于增加新列和新的完整性约束条件,Drop子句用于删除指定的完整性约束条件,Modify子句用于修改原有的列定义。
例4 向student表增加“入学时间”列,其数据类型为日期型
Alter Table Student Add Scome Date;
不论基本表中原来是否已有数据,新增加的列一律为空值。
例5 将年龄的数据类型改为半字长整数
Alter Table Student Modify Sage Smallint;
修改原有的列定义有可能会破坏已有数据。
例6 删除关于学号必须取唯一值的约束
Alter Table Student Drop Unique(Sno);
Sql没有提供删除属性列的语句,用户只能间接实现这一功能,即先原表中要保留的列及其内容复制到一个新表中,然后删除原表,并将新表重命名为原表名。
浙公网安备 33010602011771号