通过视图更新行

如果您在视图上有 Update 权限,则您可通过单表视图更新数据(请参阅 GRANT 语句)。对于可更新的视图,定义该视图的查询必须不包含任何下列项:

  1. projection 列表中聚集值的列
  2. projection 列表中使用 UNIQUE 或 DISTINCT 关键字的列
  3. GROUP BY 子句
  4. UNION 运算符

此外,如果在有列的派生值的表上构建视图,则不可通过该视图更新那列。然而,可更新该视图中的其他列。在可更新的视图中,您可通过将值插入到该视图内来更新基础表中的值。

CREATE VIEW cust_view AS SELECT * FROM customer;

UPDATE cust_view SET customer_num=10001 WHERE customer_cum=101;

下列语句定义包括 customer 表中所有行的视图,并将列值为 101 的任何行中的 customer_num 值更改为 10001:

CREATE VIEW cust_view AS SELECT * FROM customer;

UPDATE cust_view SET customer_num=10001 WHERE customer_num=101;

当更新值不适合定义了该视图的 SELECT 语句时,您可使用数据完整性约束来防止用户更新基础表中的值。要获取更多信息,请参阅 WITH CHECK OPTION 关键字。

由于即使视图的基本表有唯一的行,在视图仍可发生重复的行,因此当通过视图更新表时请小心。例如,如果在 items 表上定义视图,且仅包含 order_numtotal_price 列,且如果来自同一订单的两项有相同的总价,则该视图包含重复的行。在此情况下,如果您更新两个重复的 total_price 值中的一个,则您无法知道更新哪个项价格。

重要 如果您正在使用带有检查点的视图,则您不可更新远程表中的行。

以 UPDATE 语句直接修改视图中的数据值的替代方法,是在该视图上创建 INSTEAD OF 触发器。要获取更多信息,请参阅 视图上的 INSTEAD OF 触发器。

在没有事务的数据库中更新行

如果您正在在没有事务的数据库中更新行,则您必须采取显式的活动来恢复更新了的行。例如,如果在更新某些行之后 UPDATE 语句失败,则成功地更新了的行保留在表中。您不可自动地从失败的更新中恢复。

在带有事务的数据库中更新行

如果您正在带有事务的数据库中更新行,且您正在使用事务,则您将可使用 ROLLBACK WORK 语句撤销更新。如果在更新之前您未执行 BEGIN WORK 语句,且更新失败,则数据库服务器自动地回滚自从更新操作开始以来对该表进行的任何数据库修改。

CREATE TEMP TABLE 语句可包括 WITH NO LOG 选项来创建不支持事务日志记录的临时表。这些表不进行日志记录且不可恢复。

请不要在事务内使用 RAW 表。您以 CREATE RAW TABLE 语句创建的表不进行日志记录。因此,RAW 表是不可恢复的,即使数据库使用日志恢复。RAW 表通常用作初始加载和验证数据。在您已加载了数据之后,请使用 ALTER TABLE 语句来将该表更改为类型 STANDARD,并在您在事务中使用该表之前执行 0 级备份。要获取更多关于 RAW 表的信息,请参考 GBase 8s 管理员指南

在符合 ANSI 的数据库中,事务是隐式的,且所有数据库修改都发生在事务内。在此情况下,如果 UPDATE 语句失败,您可使用 ROLLBACK WORK 来撤销更新。

如果您在显式的事务内,且更新失败,则数据库服务器自动地撤销该更新的影响。

锁定注意事项

当带着更新的意图选择行时,该更新进程需要 update 锁。update 锁允许其他进程读或共享将要被更新的行,但它们不允许那些进程更新或删除它。

就在更新发生之前,更新进程将共享锁提升为排他锁。排他锁防止其他进程读取或修改行的内容,直到释放该锁为止。

更新进程可从另一进程在行上或在有共享锁的页上获得 update 锁,但您不可将 update 锁从共享的提升到排他的(且不可发生更新),直到其他进程释放它的锁为止。

如果单个更新影响的行的数目很大,则您可超过在同时发生的锁的最大数目上设置的限制。如果发生此情况,则您可减少每 UPDATE 语句的事务数,或您可在执行该语句之前锁定页或整个表。

南大通用GBase8s 常用SQL语句(288)相关推荐

  1. 南大通用GBase8s 常用SQL语句(八十三)

    南大通用GBase8s 常用SQL语句(八十三) Interval fragment 子句 使用 Interval Fragment 子句存储通过一个或多个计算为数字或 INTERVAL 数据类型的范 ...

  2. 南大通用GBase8s 常用SQL语句(八十)

    南大通用GBase8s 常用SQL语句(八十) FRAGMENT BY 子句 使用 FRAGMENT BY 子句创建分片表并指定它的存储分布方案.PARTITION BY 关键字是 FRAGMENT ...

  3. 南大通用GBase8s 常用SQL语句(八十一)

    南大通用GBase8s 常用SQL语句(八十一) 使用 REMAINDER 关键字 使用 REMAINDER 关键字来指定存储超出指定表达式的有效值的存储空间.如果不指定 remainder ,并且在 ...

  4. 南大通用GBase8s 常用SQL语句(四十)

    南大通用GBase8s 常用SQL语句(四十) DATAFILES 子句 DATAFILES 子句指定当您使用外部表时打开的操作系统文件或管道. DATAFILES 子句 元素 描述 限制 语法 fi ...

  5. 南大通用GBase8s 常用SQL语句(261)

    使用 Cursor Stability 隔离级别 使用 Cursor Stability 选项来在获取的行上放置共享锁,当您获取另一行或关闭该游标时,将其释放.另一进程还可在同一行上放置共享锁,但没有 ...

  6. 南大通用GBase8s 常用SQL语句(124)

    DROP INDEX 语句 使用 DROP INDEX 语句删除索引. 该语句是 SQL ANSI/ISO 标准的扩展. 语法 元素 描述 限制 语法 index 要删除的索引的名称 必须存在于当前数 ...

  7. 南大通用GBase8s 常用SQL语句(100)

    用于插入的 REFERENCING 子句 Insert 触发器的 REFERENCING 子句可以为列中要插入的值声明相关名称. 用于插入的 REFERENCING 子句 元素 描述 限制 语法 co ...

  8. 南大通用GBase8s 常用SQL语句(257)

    完整连接级别设置和输出示例 SET EXPLAIN 语句支持完整连接级别设置. SET EXPLAIN 语句支持完整连接级别设置.这意味着在连接时将本地会话环境中的值传播到所有下列类型的新的或恢复的事 ...

  9. 南大通用GBase8s 常用SQL语句(108)

    CREATE VIEW 语句 使用 CREATE VIEW 语句创建新的视图,该视图基于驻留在数据库(或本地数据库服务器或不同的数据库服务器中的另一个数据库)中的一个或多个现有表和视图. 语法 元素 ...

  10. 南大通用GBase8s 常用SQL语句(259)

    SET ISOLATION 语句 使用 SET ISOLATION 语句来定义在尝试同时地访问相同行的进程之中的并发程度. 此语句是对 SQL 的 ANSI/ISO 标准的扩展. 语法 用法 SET ...

最新文章

  1. LeetCode-剑指 Offer 13. 机器人的运动范围
  2. tomcat:Could not publish to the server. java.lang.IndexOutOfBoundsException
  3. OpenCV——图像修复函数intpaint()使用详解
  4. 【文件系统】删除文件名中含有空格的文件
  5. java 如何忽略异常_java中如何解决异常
  6. 一个电子工程师的完美人生!
  7. c语言函数fread的调用形式,C语言的问题,fread和fgets的区别是什么?
  8. linux 下清空回收站命令
  9. 程序员专属精美简历合集—第二弹
  10. linux系统挂载NTFS格式文件系统
  11. 通达信副图指标公式:买卖黄金线(抄底用)
  12. BeanAir无线传感器方案
  13. libgen批量上传格式 改名脚本python3
  14. python爬虫面试题集锦及答案
  15. FND Debug Log FND LOG MESSAGES
  16. 碰到文件夹损坏咋解决?
  17. keil4怎么建立c语言工程,第5节:用keil软件新建,关闭,打开一个完整工程的操作流程...
  18. 手写redis@Cacheable注解 支持过期时间设置
  19. 【K8S系列】深入解析 k8s:入门指南(一)
  20. 理解 rb_tree

热门文章

  1. 源恒房地产税务软件介绍之税务核算
  2. 使用border-radius画圆、半圆、扇形
  3. c语言实现无向图的邻接表储存
  4. 姓名、手机号、证件号掩码
  5. VMware发布开源项目Lightwave和Photon 提高云应用扩展性
  6. 如何利用 Kyligence+tableau提高分析效率?
  7. 苹果CMSv10首涂第十七套原创好收录高权重seo自适应高端模板
  8. ROS之mocap_optitrack
  9. 深圳工资指导价出炉!最高月薪6万!哪个行业有“钱途”?
  10. 程序员的焦虑-职业(中年)危机