🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 44.4\. 数据改变的可视性 下面规则决定使用 SPI(或者任何其它 C 函数)的函数里面的数据修改的可视性: * 在一个 SQL 命令执行期间,任何这个命令做的数据改变都是命令本身所看不到的。 比如,在下面命令里: ``` INSERT INTO a SELECT * FROM a; ``` 插入的行是`SELECT`部分看不到的。 * 命令 C 做的修改可以被 C 之后开始的所有命令看到,不管他们是在 C 里面 (在执行 C 期间)还是在 C 完成后开始的。 * 一个命令,如果是在一个 SQL 命令调用的函数(普通函数或者是触发器)里通过 SPI 执行的, 那么它遵循上面两个规则之一,具体哪个取决于传递给 SPI 的读/写标志。 以只读模式执行的命令遵循第一条规则:它们看不见调用它的命令做的修改。 以读写模式执行的规则遵循第二条规则:它们可以看到迄今为止所做的所有改变。 * 所有标准的过程语言都根据函数的易失性属性设置 SPI 读写模式。`STABLE` 和`IMMUTABLE`函数是以只读模式设置的,而`VOLATILE` 函数是以读写模式设置的。虽然其它 C 函数可以违反这个规定,但是这么做不是好事。 下一节里包含一些例子,演示了这些规则的应用。