• 沒有找到結果。

说明:

1)从以上建立表的基本格式可以看出,用 CREATE TABLE 命令建立表可以完成用第 3 章介绍的表设计器能够完成的所有功能。

2)具体命令短语功能如表 4-3 所示。

表 4-3 命令短语功能

KEY …REFERENCES…

用来定义表之间的联系

CREATE DATABASE 学生数据库 CREATE TABLE 学生表(;

图 4-65 学生数据库 例 4.69 用命令创建“教师表”。

CREATE TABLE 教师表(;

教师编号 C(3) PRIMARY KEY,;

教师姓名 C(8),;

职称 C(8),;

工资 I CHECK(工资>1000 AND 工资<=6000);

ERROR "工资的范围在 1000~6000!";

DEFAULT 1500)

例 4.70 用命令创建“课程表”。

CREATE TABLE 课程表(;

课程编号 C(2) PRIMARY KEY,;

课程名称 C(20),;

学分 I ,;

教师编号 C(3),;

FOREIGN KEY 教师编号 TAG 教师编号 REFERENCES 教师表) 例 4.71 用命令创建“成绩表”。

CREATE TABLE 成绩表(;

学号 C(4) ,;

课程编号 C(2),;

成绩 N(6,2) CHECK(成绩>=0 AND 成绩<=100);

ERROR "成绩应该在 0 至 100 之间";

DEFAULT 0,;

FOREIGN KEY 学号 TAG 学号 REFERENCES 学生表,;

FOREIGN KEY 课程号 TAG 课程号 REFERENCES 课程表) 说明:

1)在学生表中用 PRIMARY KEY 命令说明“学号”为主关键字。

2)在教师表中用 CHECK 说明了“工资”字段的有效性规则为“工资>1000 AND 工资

<=6000”。

用 ERROR 说明了当输入出错时的提示信息为“工资的范围在 1000~6000!”;

用 DEFAULT 说明了当没有输入教师工资时默认显示为 1500。

3)在成绩表中用 CHECK 说明了“成绩”字段的有效性规则;用 ERROR 说明了出错信 息;还用 default 命令说明了“成绩”字段的默认值为 0。

4)利用短语“FOREIGN KEY 学号”和“FOREIGN KEY 课程号”在成绩表中建立两 个普通索引,作为连接字段,并通过引用学生表的主索引“学号”(TAG 学号 REFERENCES 学生表)建立了成绩表与学生表之间的联系;通过引用课程表的主索引“课程号”(TAG 课程

号 REFERENCES 课程表)建立了成绩表与课程表之间的联系。

4.3.2 删除表

删除表的 SQL 命令如下。

格式:DROP TABLE <表名>

功能:直接从磁盘上删除指定的表所对应的 DBF 文件。

修改表结构的命令是 ALTER TABLE,它包括添加(ADD)、修改(ALTER)、删除(DROP)

表中的字段、字段类型、字段宽度、字段有效性规则及索引等。修改表结构的命令有 3 种格式。

格式 1:ALTER TABLE <表名 1> ADD|ALTER ;

[COLUMN] <字段名 1 > <字段类型>[(字段宽度)][NULL|NOT NULL]

[CHECK <逻辑表达式>[ERROR<提示信息>]][DEFAULT<表达式>]

[PRIMARY KEY|UNIQUE]

[REFERENCES <表名 2>[TAG <索引名>]]

说明:此格式可添加(ADD)新的字段或修改(ALTER)已有的字段,它的句法基本与 CREATE TABLE 的句法相对应。

例 4.73 为 score 表增加一个长度为 2 的整型的学分字段,

要求学分有效性规则为大于等于 0,默认值为 2,提示信息为“学 分应该大于 0”。

ALTER TABLE score ADD 学分 I CHECK 学分>=0 ERROR "

学分应该大于 0" DEFAULT 2 结果如图 4-66 所示。

例 4.74 将 student 表中的家庭住址的长度由 8 改为 20。

ALTER TABLE student ALTER 家庭住址 C(20) 说明:

1)从以上两个例题可以看出,该格式可以修改字段的类型、宽度、有效性规则、错误信 息、默认值。另外,还可以定义主关键字和联系等。

2)但是用“ALTER TABLE … ADD|ALTER …”命令格式不能修改字段名,不能删除字 段,也不能删除已经定义的有效性规则。

格式 2:ALTER TABLE <表名> ALTER [COLUMN] <字段名 1> [NULL|NOT NULL]

[SET DEFAULT ]

[SET CHECK <逻辑表达式>[ERROR<提示信息>]]

[DROP DEFAULT]

[DROP CHECK]

图 4-66 例 4.73 的添加结果

说明:

1)SET DEFAULT:用于设置默认值。

2)SET CHECK <逻辑表达式>[ERROR<提示信息>]:用于设置有效性规则和错误提示 信息。

3)DROP DEFAULT:用于删除已经存在的默认值。

4)DROP CHECK:用于删除已经存在的有效性规则。

例 4.75 使用 SQL 命令为 score 表中“成绩”字段增加有效性规则:成绩在 0~100 之间 且默认值为 60。

ALTER TABLE score ALTER 成绩 ; SET DEFAULT 60 ;

SET CHECK 成绩>=0 AND 成绩<=100 ERROR"成绩应在 0~100 之间!"

例 4.76 使用 SQL 命令删除 score 表中成绩字段的有效性规则。

ALTER TABLE score ALTER 成绩 DROP DEFAULT DROP CHECK

以上两种格式都不能删除字段,也不能更改字段名,所有修改是在字段一级。为了补充 这个功能,引出第三种格式。

格式 3:ALTER TABLE <表名 1> [DROP [COLUMN]<字段名>]

[SET CHECK <表达式 >ERROR<提示信息> ] [DROP CHECK]

[ADD PRIMARY KEY <表达式 >TAG <索引名>[FOR<表达式>] ] [DROP PRIMARY KEY ]

[ADD UNIQUE <表达式>[TAG <索引名>[FOR<表达式>]]]

[DROP UNIQUE <表达式>]

[ADD FOREIGN KEY <表达式> TAG <索引名>[FOR<表达式>]]

REFERENCES <表名 2>[TAG <索引名>]

[DROP FOREIGN KEY TAG <索引名>[SAVE]]

[RENAME [COLUMN] <字段名> TO <新字段名>]

说明:

1)此格式可删除字段,可修改字段名;可定义、修改和删除表一级的有效性规则等。

2)DROP [COLUMN]字段名:删除指定的字段。

3)SET CHECK <表达式> ERROR<提示信息>:定义表一级的有效性规则。

4)DROP CHECK:删除表一级的有效性规则。

5)ADD PRIMARY KEY <表达式>TAG <索引名>[FOR<表达式>]:定义一个主索引项。

6)DROP PRIMARY KEY:删除主索引。

7)ADD NUIQUE <表达式>[TAG <索引名> [FOR<表达式>]]:定义一个候选索引。

8)DROP UNIQUE <表达式>:删除候选索引。

9)ADD FOREIGN KEY <表达式 >TAG <索引名>[FOR<表达式>]:建立表之间的关系。

10)RENAME [COLUMN] <字段名> TO <新字段名>:修改字段的名称。

例 4.77 使用 SQL 命令将 course 表中的“教师编号”字段名改为“授课教师”。

ALTER TABLE course RENAME 教师编号 TO 授课教师 例 4.78 使用 SQL 命令删除 score 表中的“学分”字段。

ALTER TABLE score DROP 学分

例 4.79 使用 SQL 命令将 course 表的“课程名称”和“教师编号”定义为候选索引(候

选关键字),索引名是 htt_sp。

ALTER TABLE score ADD NUIQUE 课程名称+教师编号 TAG htt_sp 例 4.80 使用 SQL 命令将 teacher 表的主索引删除。

ALTER TABLE teacher DROP PRIMARY KEY 4.3.4 视图

1.视图的概念及其定义

Visual FoxPro 中视图是一个虚拟的表,可以把它看作是从表中派生出来的虚表。视图可 引用一个或多个表,或者引用其他视图。视图依赖于表,不独立存在。在关系数据库中,视 图也称为窗口,即视图是操作表的窗口。

使用 SQL 命令定义视图的基本格式如下:

CREATE VIEW <视图名>[(<字段名 1>[,<字段名 2>]…)];

AS SELECT 查询语句

CREATE VIEW student_VIEW AS SELECT * FROM student 说明:

1)student_view 是视图的名称,视图中存放的内容为 AS 后面的 SELECT 查询语句的查 询结果。

2)视图一经定义,就可以和基本表一样进行各种查询,也可以进行一些修改操作。对 于最终用户来说,有时并不需要知道操作的是基本表还是视图。如下例所示:

SELECT * FROM student_VIEW 等价于

SELECT * FROM student

例 4.82 使用 SQL 命令建立一个视图 xuesheng_view,要求该视图包含 1980 年 1 月 1 日之后出生的学生的学号、姓名、平均成绩。

SELECT student.学号, student.姓名,AVG(成绩) AS 平均成绩;

FROM student,score;

WHERE student.学号 = score.学号 AND 出生日期>{^1980-01-01};

GROUP BY score.学号 2.视图的删除

视图由于是从表派生而来的,所以不存在修改结构的问题,但是视图可以删除。

格式:DROP VIEW <视图名>

例 4.83 使用 SQL 命令删除视图 xuesheng_view。

DROP VIEW xuesheng_view

注意:在关系数据库中,视图始终不真正含有数据,它总是原有表的一个窗口。所以,

虽然对视图可以像表一样进行各种查询,但是插入、更新和删除操作在视图上却有一定限制。

在一般情况下,当一个视图是由单个表导出时可以进行插入和更新操作,但不能进行删除操作;

当视图是从多个表导出时,插入、更新和删除操作都不允许进行。

相關文件