【问题标题】:When using with SAVEPOINT and ROLLBACK , what will be the output of this?当与 SAVEPOINT 和 ROLLBACK 一起使用时,它的输出是什么?
【发布时间】:2017-01-20 15:45:00
【问题描述】:

我要回答这条 SQL 语句。

INSERT INTO CUSTOMER (customerid,customername) VALUES(1,'alpha');
INSERT INTO CUSTOMER (customerid,customername) VALUES(2,'beta'); SAVEPOINT s1;
INSERT INTO CUSTOMER (customerid,customername) VALUES(3,'gamma'); SAVEPOINT s2;
INSERT INTO CUSTOMER (customerid,customername) VALUES(4,'tera'); SAVEPOINT s3;
INSERT INTO CUSTOMER (customerid,customername) VALUES(5,'omega');
ROLLBACK TO s3;

SELECT customername FROM CUSTOMER;

答案:

  1. 回滚选项无效会报错

  2. 欧米茄

  3. alpha,beta,gamma,tera

  4. 会报错:不能有多个保存点

【问题讨论】:

  • 答案是选项 3。alpha,beta,gamma,tera。
  • 不清楚您指的是哪种 SQL 方言。我们也应该猜到吗?例如,在 T-SQL 中,它将是 SAVE TRANSACTION savepoint_nameROLLBACK TRANSACTION savepoint_name。如果这个问题只针对mysql,那么请去掉sql标签。

标签: mysql sql


【解决方案1】:

SAVEPOINT 名称- 在当前事务中标记一个保存点,一个事务中可以有多个保存点。

ROLLBACK TO SAVEPOINT name -ROLLBACK TO SAVEPOINT 将当前事务回滚到指定的保存点,因此它会丢弃在您回滚到的保存点之后创建的任何更改和/或保存点。

所以在你的问题中,它将回滚到插入 4,tera 后创建的点。所以值 5, omega 将被丢弃。所以选择查询会给出

customername
-------------
    alpha
    beta
    gamma
    tera

【讨论】:

    【解决方案2】:

    在mysql中我们得到以下错误: SAVEPOINT s3 不存在 但 select 语句将起作用并给出以下结果:

    客户名称

    alpha
    beta
    gamma
    tera
    

    【讨论】:

      猜你喜欢
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2019-02-17
      • 2021-04-08
      相关资源
      最近更新 更多