首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有rollback的事务中的SQL if子句

带有rollback的事务中的SQL if子句
EN

Stack Overflow用户
提问于 2017-08-07 07:06:24
回答 1查看 118关注 0票数 0

为什么这不起作用?

问题: 2.创建事务以进入新锦标赛。此事务处理将执行以下步骤:

a.检查具有ID 20和锦标赛位置‘图腾车道’的锦标赛是否被插入到表‘锦标赛’(1分)中。

b.如果有一个记录,ID为20,‘2016-11-29’巡回赛日期和‘图腾车道’巡回赛位置的锦标赛被输入到‘锦标赛’表中(1分)。

c.回滚事务结束时的所有更改(1分)。

代码:

代码语言:javascript
复制
/* Question 2 */
START TRANSACTION;

IF EXISTS SELECT *
FROM Tournaments
WHERE TourneyID = 20 and TourneyLocation = 'Totem Lanes'
IF EXISTS SELECT *
FROM Tournaments
WHERE TourneyID = 20 and TourneyDate = '2016-11-29' and TourneyLocation = 'Totem Lanes';

ROLLBACK;
EN

回答 1

Stack Overflow用户

发布于 2019-07-20 05:58:28

我对您所说的解释是,如果在桌上锦标赛中存在ID为20、位置为“图腾车道”的锦标赛记录,则插入ID为20、位置为“图腾车道”的锦标赛记录和位置为“2016-11-29”的巡回赛记录。这听起来有点胡说八道,但我会这样做:

代码语言:javascript
复制
SET AUTOCOMMIT=0;

INSERT INTO Tournaments(TourneyID, TourneyDate, TourneyLocation)
   SELECT 20, '2016-11-29', 'Totem Lanes' FROM DUAL WHERE EXISTS (
      SELECT * from Tournaments WHERE TourneyID = 20 AND TourneyLocation = 'Totem Lanes'
   )
;

ROLLBACK;

这是一种使用WHERE子句执行条件插入的方法。WHERE子句位于SELECT语句上,该语句必须为要插入的列提供值。在本例中,由于这些值是常量,因此它们是从MySql虚拟表DUAL中选择的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45537470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档