数据库中主要的部分是不同的表,在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时不关心这些限制条件,会将这些一并删除。