具有回滚的事务中的SLQ if子句

时间:2017-08-06 23:06:24

标签: mysql transactions

为什么这不起作用?

问题: 2.创建一个交易以进入新的锦标赛。此交易将执行以下步骤:

一个。检查具有ID 20和锦标赛位置'Totem Lanes'的锦标赛是否是 插入表'锦标赛'(1分)。

湾如果有记录,比赛有ID 20,'2016-11-29'Tourney Date和'Totem Lanes'Tourney位置进入表'锦标赛'(1分)。

℃。在事务结束时回滚所有更改(1分)。

CODE:

/* 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;

1 个答案:

答案 0 :(得分:0)

我对您所说内容的解释是,如果在桌上锦标赛中存在ID为20且“ Totem Lanes”位置的比赛的锦标赛记录,请插入ID为20的锦标赛记录图腾车道”的位置和“ 2016-11-29”的比赛日期。听起来有些荒谬,但是我要这样做的方式是:

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中选择它们。