假设我们有以下情况:
我们有一张桌子(比方说Table_A
),上面有一个触发器INSERT
。触发器作业是table_B
根据插入的值更新table_A
.
现在,当我们简单地在表中插入一行时一切都好,但是我们通过事务插入数据的情况呢?触发器会等到所有事务语句成功运行,还是在识别插入时触发?如果触发器在识别到第一个插入时立即触发,如果最后一行的事务失败会发生什么?这种情况有什么机制吗?
假设我们有以下情况:
我们有一张桌子(比方说Table_A
),上面有一个触发器INSERT
。触发器作业是table_B
根据插入的值更新table_A
.
现在,当我们简单地在表中插入一行时一切都好,但是我们通过事务插入数据的情况呢?触发器会等到所有事务语句成功运行,还是在识别插入时触发?如果触发器在识别到第一个插入时立即触发,如果最后一行的事务失败会发生什么?这种情况有什么机制吗?
理论上,SQL Server 中的每条语句都会创建传递给下一条语句的虚拟表。换句话说,当 FROM 和 Where 子句完成后,下一步是从之前创建的虚拟组中选择列。
但是,可以按选择列表中未列出的列对结果集进行排序。
当 SELECT 子句在 ORDER BY 之前执行并且哪个主要任务是选择列进行渲染时,这怎么可能?
这有点令人困惑,或者我没有得到任何东西。
我知道游标不是一个好主意,但我对游标的内部结构有一些疑问。
游标的第一步是确定游标遍历的结果集。那么,游标是否执行了 SELECT 查询并将结果放在某个临时表中,或者它的实现方式有所不同?
SQL 将在内存中从磁盘中获取数据页,第一次需要数据页。因此,假设我手动执行了简单的 SELECT 查询,并且 SQL 将数据页拉入内存。还假设 SELECT 查询在 FOR 子句中有相同的查询。当游标关闭并释放时,游标末尾发生了什么?游标是否从已用数据页中释放内存,或者数据页保留在内存中?