第四节 用SQL删除数据库表
前面说过,表是数据库的最基本对象,数据全部存储在表中,数据库的管理与操作最终都会涉及到表的操作,表的创建、修改及删除是最常见的事情,在讨论了表的创建与修改之后,我们再来看一下表的删除问题,这个在编程中经常会用到,如过渡性的临时表,用后都是需要删除(大多数据库系统都支持在内存中创建临时表,退出时会自动释放,但ACCESS却不支持这一特性,所有的表都是在库文件中创建,都是正式表,不删除会一直存在)。
一、删除表的SQL语句的语法
Drop
TABLE table_name;
参数说明:语句中的table_name是要删除的表的名称。
Drop
TABLE语句用于删除表(表的结构、属性以及索引也会被删除),删除内容和定义,释放空间。简单来说就是把整个表去掉,以后要新增数据是不可能的,除非新增一个表。例如:学生管理数据中,一个班的学生数据单独放在一个表中,包括学生的各个方面的数据,表名为“class”这时用Drop TABLE class,就是把整个班移除,学生的信息数据全部都消失了。所以这里特别提醒大家删除表时一定要小心谨慎,只有确认确实是不需要的表再实施删除操作,删除时一定要先备份数据。
另外,“Drop TABLE”语句不能用于除去由“FOREIGN KEY”约束引用的表。必须先除去引用的“FOREIGN KEY”约束或引用的表。除去表时,表上的规则或默认值将解除绑定,任何与表关联的约束或触发器将自动除去。如果重新创建表,必须重新绑定适当的规则和默认值,重新创建任何触发器并添加必要的约束。在系统表上不能使用Drop TABLE语句。
二、删除表语句Drop TABLE示例
示例一,空表的删除。我们先来测试一下空白表的删除操作。首先来建立一个空表,名称为“学生”,我们用下面的SQL语句来操作:
Create
TABLE 学生
(
学号 TEXT(10) PRIMARY KEY,
姓名 TEXT(4) NOT NULL,
性别 TEXT(1),
出生年月 DATETIME,
住址 TEXT(50),
电话 TEXT(11)
);
上面的语句执行后,表被创建,我们在导航窗格中可以看到名为“学生”的表,这个表中目前还没有数据任何数据,是一个真正的空白表,下面我们来测试一下对其进行删除操作:
Drop
TABLE 学生;
命令运行后,“学生”表被删除,导航窗格中再看不到表名了,为了确认表确实被我们删除了,我们可以再执行一次“Drop TABLE 学生;”命令,系统会弹出一个错误提示框,告诉你“学生”表不存在。
示例二,删除有数据的表。现在我们来创建一个“客户”表,用如下语句:
Create
TABLE 客户
(
编号 INTEGER NOT NULL,
姓名 TEXT(50) NOT NULL,
电话 TEXT(11),
地址 TEXT(50)
);
这时我们在导航窗格中看到了“客户”表的名字,表明表已创建。我们再来插入一些数据,用以下的语句来插入:
Insert
INTO 客户 (编号,姓名,电话,地址) VALUES (1,
"张三", "07103511057", "湖北襄阳东街26号");
Insert
INTO 客户 (编号,姓名,电话,地址) VALUES (2,
"李四", "07103511058", "湖北襄阳西东街66号");
Insert
INTO 客户 (编号,姓名,电话,地址) VALUES (3,
"王五", "18903511088", "湖北襄阳西东街346号");
这三条命令执行下来,表中有了三条记录,我们用查询语句证实一下:
我们用“Select * FROM 客户;”查询一下,显示结果如下表:
编号
|
姓名
|
电话
|
地址
|
1
|
张三
|
07103511057
|
湖北襄阳东街26号
|
2
|
李四
|
07103511058
|
湖北襄阳西东街66号
|
3
|
王五
|
18903511088
|
湖北襄阳西东街346号
|
这说明表中的数据是存在的,表不为空。这时我们再来删除一下看看情况是什么样的:
Drop
TABLE 客户;
执行后,表被删除了,再查询,表不存在了,原来的数据也没有了。这说明“Drop TABLE”不仅删除了表的结构,也删除了附加在表上的一切特性包括其中存储的数据,这提醒我们删除表一定要慎重,一定要先备份再删除否则后果非常严重哟。
示例三,删除系统表测试。ACCESS是关系型数据库管理系统,它对自身的管理也采用了关系数据表来进行的,它的对象、属性等系统的特征都是记录在内部的表中,这些表称为系统表,由系统自动创建和维护,用户不能直接删除与修改。
我们在ACCESS系统的导航窗格中点击鼠标右键,在弹出的菜单中选择“导航选项……”命令,会弹出一个“导航选项”对话框,在此对话框中我们勾选“显示隐藏对象”和“显示系统对象”两个复选框后,再“确定”后,我们在导航窗格中会看上去许多以“MSys”开头的表,这些都系统自动创建和由系统自己维护的,我们只能查询,不能直接删除与修改,下面我们来测试一下看是不是这样。
我们在SQL视图中键入“Drop TABLE MSysAccessStorage;”并执行,我们会看到一个错误对话框出现,告诉我们“由于表‘MSysAccessStorage’ 下被别的用户或进程使用,数据库引擎无法锁定它。”这表明我们不能删除系统的表,我们再试一下:“Drop TABLE MSysACEs;”这时还是会弹出一个错误提示框,上显示“没有使用‘MSysACEs’对象的必要权限,请让系统管理员或安装此对象的人为您设置适当的权限。”我们不是不能删除系统的表。