数据库基本表的定义、删除与修改:原理详解

发表时间: 2024-07-30 15:28

SQL命令包括数据定义、查询、操纵和控制四大类,其中SQL的数据定义用于创建数据库中的全部数据对象,包括SQL数据库、模式、基本表、视图和索引等。

一、基本表的定义

当创建完数据库和模式之后,相当于是建立了一个命名空间,在这个空间中,首先要定义基本表。定义基本表,使用SQL命令中的CREATE TABLE命令来完成。

创建基本表的语法:

CREATE TABLE <基本表名>

(<列名 ><数据类型>[列级完整性约束条件]

[, <列名 ><数据类型>[列级完整性约束条件]

[.表级完整性约束条件]);

建立一张表,首先给出表的名字,依次给出该表中的若干列的名字;对于每一个列它的数据类型,如果有完整性约束条件的话,在每一个列名之后要给出列级完整性约束条件;如果完整性约束条件涉及到多个列的话,要在最后给出表级的完整性约束条件。

在SQL中,域的概念是用数据类型来实现的。

SQL提供的基本数据类型有数值型、字符型和日期型等等。

1.数值型:

长整型 Integer(int):长整数(4个字节)。

短整型 smallint:短整数(2个字节)。

numeric(p,d):定点数,共p位(不包括小数点),右边d位。

real:浮点数(4个字节)。

double precision:双精度浮点数。

float(n):浮点数(8个字节)。

如果定义的一列是短整型的话,意味着是如果是两个字节的短整数、带符号的数据,那么该列的取值范围就应该是整数,并且由负的2的15次方到正的2的15次方-1这样的一个范围。也就是数据类型是给出的某一列数据的取值范围,以允许的形式。

2.字符型:

char(n):固定长度的字符串。

varchar(n):可变长字符串。

3.日期/时间型:

date:日期(年、月、日)。

time:时间(小时、分、秒)。

SQL2003中支持一些新的数据类型:

4.XML数据类型(SQLXML)

5.其他数据类型

布尔类型(BOOLEAN)。

时间戳类型timestamp。

6.用户定义数据类型:

SQL2003中允许用户去自定义数据类型。

每一种类型都会有很多种变化,而不同的DBMS所支持的数据类型也不完全相同。

SQL Server2008中支持的数据类型部分截图

属性选用哪一种数据类型,根据其取值和所做的运算来确定。如学生的学号可以用数值型、也可以用字符型来表示,由于学号一般不做加减乘除类的运算,所以通常用字符型来表示学号。

建表的同时,还可以定义与该表有关的完整性约束条件。所谓的完整性约束条件,指的是数据所要满足的语义上的一些限制条件。

在SQL中常用完整性约束:

主码约束:PRIMARY KEY

唯一性约束:UNIQUE

非空值约束:NULL/NOT NULL

参照完整性约束:FOREIGN KEY

REFERENCES

检查子句:CHECK

上述的这些保留字不能用作表名、列名等。

如果完整性约束条件涉及到该表的多个属性列时,必须在表级定义该约束条件,否则既可以把该约束条件定义在列级,也可以定义在表级。

完整性约束条件被存入系统的数据字典中。

例一:建立学生关系模式S(sno,sname,age,sex)

学生关系模式S有四个属性列,分别表示学生学号-sno,姓名-sname,年龄-age,性别-sex。那么在SQL中,每个关系模式取一张表来对应。

具体的建表命令图

建立表S,给出每一个列的数据类型及它的约束。学号是字符型,4位,不能为空;姓名是字符型,8位,不能为空;年龄是短整型;性别是固定长度的字符型,1位。其中,在表S中,学号是主键,可以定义在表级,也可以定义在列级。

在SQL Server2008的环境中,当把建表S的命令输入进去、的执行成功以后,在student数据库之下看到表点右键刷新后,可以看到表S已经被创建成功,dbo是SQL Server中默认的用户名和模式名。

例二:建立课程关系模式 C(cno,cname,tname)

课程关系模式 C有三个属性列,包括课程号-cno、课程名-cname、教室名tname。用CREATE TABLE C来完成建表。

同上,在建表C的时候指明了这三个列的名字、每一个列的数据类型、长度和完整性约束条件。同理,在表C中,课程号是主键,可以定义在表级,也可以定义在列级。

例三:建立选课关系模式SC(sno,cno,grade)

选课关系模式 SC有三个属性列,包括学号-sno、课程号-cno、成绩-grade。仍然用CREATE TABLE SC来完成建表。

在SC中,学号是字符型,4位,不能为空;课程号是字符型,4位,不能为空;成绩是短整型。在SC表中,除了定义主键以外,还要定义外键;主键是由两个属性列共同组成的,所以必须要定义在表级,而不能定义在上面的列级;外键可以定义在表级,也可以定义在列级,这里定义在表级,指出学号是一个外键、引用的是表S中的学号的取值,课程号也是一个外键、引用的是表C中的课程号的取值。此外,在表SC中,还增加了一个CHECK约束,即成绩可以为空、如果成绩不为空的话就必须在取值范围0到100之间取值。

二、基本表的修改

DBMS允许用户修改已经建好的基本表。

(1)对表增加列

修改基本表的命令主要是用ALTER TABLE来表示。

ALTER TABLE<表名> ADD <列名> <数据类型>

[NULL|NOT NULL],...;

例:ALTER TABLE S ADD addr CHAR(20);(向表S中增加地址列addr、字符型的、长度为20)

如果原表中已存在数据,则新定义的列必须设置为NULL,表中原有元组在新增加的列上的值均被定义为空值

(2)撤销原有的列

语法:ALTER TABLE<表名> DROP COLUMN<列名>;

例: ALTER TABLE S DROP COLUMN addr:

(3)修改原有的列类型

语法:ALTERTABLE<表名> ALTER COLUMN<列名>;

例:ALTER TABLES ATER addr CHAR(10);

需要注意的是,不同的DBMS对于标准的支持不同。

三、基本表的删除

当基本表不再被需要的时候,DBMS也允许用户删除基本表。

语法:DROPTABLE<表名>[CASCADE|RESTRICT]

★CASCADE(连锁)RESTRICT(约束)

需要注意的是,删除表的命令有两个可选项,CASCADE表示级联操作,RESTRICT表示有约束的删除。

例:DROP TABLE SC CASCADE:

当选择CASCADE级联模式删除表时,表的数据、表上建立的索引和视图都自动被删除。如果选择RESTRICT约束模式,如果在表SC上存在其他的数据对象即建立在表SC上的视图或者是索引的话,那么是不允许删除表SC的。

需要注意的是,不同的数据库产品对于标准的语法会有所差别。如在SQL Server中,没有CASCADE(连锁)、RESTRICT(约束)这两个选项,允许用户直接删除。因此,在执行删除基本表的操作的时候要格外的小心。

四、总结

SOL的数据定义部分包括对模式、基本表、索引等数据库对象的创建和删除操作。

其中,基本表是最主要的数据库对象,视图和索引等是建立在基本表之上的。每一个表与关系模式对应,建立一个用户数据库首先就是建立该数据库中的所有的表。

在实现SOL标准的时候,不同的数据库产品在处理策略上会与标准有所差别,具体需参考所用产品的用户手册。