UPDATE CUSTOMER
SET CN='JACK CHEN' WHERE C#=20
例2 使用子查询更新 将订购商品 编号为 12 的客户的年龄加 2 UPDATE CUSTOMER
SET CA=CA+2 WHERE C#=
SELECT C#
FROM ORDERED
WHERE ORDERED.M#=12) z 插入 INSERT
INTO CUSTOMER
VALUE 35 'JONH' 25 'THREE'
例2 将职员表 EMPLOYEE 中人员添加到客户表中 INSERT
INTO CUSTOMER
SELECT E# EN EA ED
[WHERE 条件]
DELETE 语句将按条件删除表中的记录 如果没有条件 则删除表中的全部记录 但 表的定义仍然保留
例 删除住在FIVE STREET 的客户记录 DELETE
FROM CUSTOMER
WHERE CD='FIVE STREET'
2.2.4 视图
视图是访问数据库中数据的一种特殊形式 是一个虚表 一个视图是从一个或多个基 本表或视图导出的 在数据库中只保存了视图的定义 定义了一个视图后 便可以像基本 表一样对其进行查询 删除操作 也可用于创建新的视图 只是对视图的更新操作受到一 些限制
SQL 视图定义语句格式如下
CREATE VIEW 视图名[ 字段名[ 字段名] ] AS 子查询
[WITH CHECK OPTION]
语句将根据查询创建查询 WITH CHECK OPTION 表示在对视图执行 UPDATE 和 INSERT 操作是要保证更新或插入的行必须满足视图定义中的查询条件
例如 创建居住在FIVE STREET 的客户的视图 CREATE VIEW VIEW_CUSTOMER
AS SELECT C# CN CA FROM CUSTOMER
WHERE CD='FIVE STREET' SQL 视图删除语句格式如下
DROP VIEW 视图名
例如 DROP VIEW VIEW_CUSTOMER
删除操作将视图定义从数据库中删除掉 由该视图导出的其他视图也会被自动删除 另外如果导出视图的基本表被删除了 视图也会被自动删除
对视图的更新和查询操作与操作基本表完全一样 只是视图会受到如下一些限制 1. 如果视图中的数据来自字段表达式或常数 则不允许对视图执行 UPDATE INSERT 操作 但可以进行 DELETE 操作
2. 如果视图中的字段来自库函数 则不允许执行更新操作
3. 如果视图定义中有GROUP BY 子句或 DISTINCT 选项 也不允许更新 4. 如果视图定义中有嵌套查询 并且嵌套查询的FROM 子句中涉及的表也是导出该 视图的基本表 则此视图不允许更新
5. 如果是由两个以上的基本表导出的视图 也不允许更新 6. 一个不允许更新的视图导出的视图 也不允许更新
2.2.5 SQL 数据控制功能
数据控制功能实际上是指对数据库实施安全性控制 包括对数据库中数据的使用 对 数据库 包括其中的基本表 视图 字段 执行查询 插入 修改 删除等操作 在大型 共享关系数据库中 安全性问题就显得尤为重要
SQL 数据控制功能指使用 GRANT 语句将对数据库的使用权限赋予某个用户 以及在 适当时候使用 REVOKE 语句收回权限 对不同的操作对象有不同的操作权限 如表 2-2 所示
表 2-2
操作对象 操作权限
基本表 视图 字段 SELECT INSERT UPDATE DELETE
ALL PRIVILEGE 基本表 ALTER INDEX
数据库 CREATETAB 表空间 USE
系统 CREATEDBC
1. 对基本表 视图及其字段可赋予的操作权限有查询 插入 更新 删除以及所有 这些权限ALL PRIVILEGE
2. 对基本表的操作权限还有修改 ALTER 和建立索引 INDEX
3. 对数据库的操作权限有创建基本表 CREATETAB 创建表的用户拥有对该表 的所有权限
4. 对表空间可以赋予使用 USE 数据库空间存储基本表的权限 5. 对系统有创建新数据库 CREATEDBC 的权限
授权语句的基本格式如下
GRANT 权限[ 权限] [ON 对象类型 对象名] TO 用户[ 用户]
[WITH GRANT OPTION]
其中 使用WITH GRANT OPTION 选项赋予用户可把其得到的权限授予他人的权 限
例1 将对 CUSTOMER 表的查询 修改 插入 删除等权限赋予用户 MIKE GRANT ALL PRIVILEGE ON TABLE CUSTOMER TO MIKE 例2 将对 CUSTOMER 表的查询权限赋予用户 JODAN
GRANT SELECT ON TABLE CUSTOMER TO JODAN 收回权限语句的基本格式如下
REVOKE 权限[ 权限] [ON 对象类型 对象名] FROM 用户[ 用户]
例3 将用户 JODAN 对 CUSTOMER 表的查询权限收回
REVOKE SELECT ON TABLE CUSTOMER FROM JODAN