第八十二章 SQL命令 UPDATE(一)

2021-11-21  本文已影响0人  Cache技术分享

第八十二章 SQL命令 UPDATE(一)

为指定表中的指定列设置新值。

大纲

UPDATE [%keyword] table-ref [[AS] t-alias]
   value-assignment-statement 
   [FROM [optimize-option] select-table [[AS] t-alias]
         {, select-table2 [[AS] t-alias]} ]
   [WHERE condition-expression]

UPDATE [%keyword] table-ref [[AS] t-alias]
   value-assignment-statement
   [WHERE CURRENT OF cursor]

value-assignment-statement ::=
   SET column1 = scalar-expression1 {,column2 = scalar-expression2} ...  |
   [ (column1 {,column2} ...) ] VALUES (scalar-expression1 {,scalar-expression2} ...)  |
   VALUES :array()

参数

描述

UPDATE命令更改表中列的现有值。
可以直接更新表中的数据,也可以通过视图进行更新,或者使用括在括号中的子查询进行更新。
通过视图进行更新受制于需求和限制,如CREATE view中所述。

UPDATE命令为包含这些列的一个或多个现有基表行提供一个或多个新列值。
将数据值赋给列是使用值赋值语句完成的。
默认情况下,值赋值语句更新表中的所有行。

更常见的是,UPDATE根据条件表达式指定对特定的行(或行)进行更新。
默认情况下,UPDATE操作遍历表中的所有行,并更新满足条件表达式的所有行。
如果没有行满足条件表达式,UPDATE将成功完成并设置SQLCODE=100(不再有数据)。

可以指定WHERE子句或WHERE CURRENT OF子句(但不能同时指定两者)。
如果使用了WHERE CURRENT OF子句,UPDATE将更新游标当前位置的记录。
定位操作请参见WHERE CURRENT OF

UPDATE操作将%ROWCOUNT局部变量设置为更新的行数,将%ROWID局部变量设置为更新的最后一行的ROWID值。

默认情况下,UPDATE操作是一个全有或全无事件。
要么更新所有指定的行和列,要么不更新。

INSERT OR UPDATE

INSERT OR UPDATE语句是INSERT语句的变体,执行插入和更新操作。
首先,它尝试执行一个插入操作。
如果插入请求失败由于违反唯一键(字段(s)的一些独特的关键,存在这一行已经有相同的值(s)为插入指定的行),然后它会自动变成一个更新请求这一行,并插入或更新使用指定的字段值来更新现有的行。

SQLCODE错误

默认情况下,多行UPDATE是一个原子操作。
如果不能更新一行或多行,则UPDATE操作失败,不会更新任何行。
IRIS设置SQLCODE变量,该变量指示UPDATE的成功或失败,如果操作失败,还设置%msg
要更新表,更新必须满足所有表、列名和值要求,如下所示。

表:

列名和值:

唯一的例外是将SERIAL (%Library.Counter)字段添加到具有现有数据的表时。
对于这个添加的计数器字段,现有的记录将具有NULL值。
在这种情况下,可以使用UPDATENULL更改为整数值。

赋值

可以通过多种方式为指定的列分配新值。

SET StatusDate='05/12/06',Status='Purged'
(StatusDate,Status) VALUES ('05/12/06','Purged')

当将标量表达式值赋给列列表时,每个指定的列必须有一个标量表达式。

VALUES (Name,DOB,'22 Main St. Anytown MA 12345',SSN)

在为隐式列列表赋值时,必须按照DDL中定义的列的顺序为每个可更新字段提供一个值。
(没有指定不可更新的RowID列。)
这些值可以是指定新值的文字,也可以是指定现有值的字段名。
不能指定占位符逗号或省略尾随字段。

VALUES :myarray()

只能使用主机变量在嵌入式SQL中执行此值赋值。
与所有其他值赋值不同,这种用法允您延迟指定哪些列要更新到运行时(通过在运行时填充数组)。
所有其他类型的更新都要求必须在编译时指定要更新的列。
此语法不能用于链接表;
尝试这样做会导致SQLCODE=-155错误。

上一篇 下一篇

猜你喜欢

热点阅读