Mysql事务不起作用

时间:2018-02-04 01:04:09

标签: mysql transactions

我试图找到这个SQL事务的问题:

START TRANSACTION;
INSERT INTO address VALUES (null, 'Address name', 18);
-- First INSERT statement is CORRECT
INSERT INTO users VALUES (null, 'First_name', 'Last_name', 'username', 'password', '2', 'email@nowhere.com', last_insert_id(), 1);
-- Second INSERT statement is INCORRECT
COMMIT;

虽然第二个查询失败,但第一个SQL查询已成功执行。 事务的目的是执行所有语句或不执行任何语句。 用户和地址表都是InnoDB。 我是否正确地写了这笔交易?

1 个答案:

答案 0 :(得分:1)

我刚刚解决了问题。我将事务放在过程中,并为SQL EXCEPTION添加SQL代码。现在工作正常。

DROP PROCEDURE IF EXISTS insert_user;

DELIMITER //
CREATE PROCEDURE insert_user()
BEGIN

DECLARE exit handler for sqlexception
  BEGIN
    -- ERROR
  ROLLBACK;
END;

START TRANSACTION;
INSERT INTO address VALUES (null, 'Address name', 18);
-- First INSERT statement is CORRECT
INSERT INTO users VALUES (null, 'First_name', 'Last_name', 'username', 'password', '2', 'email@nowhere.com', last_insert_id(), 1);
-- Second INSERT statement is INCORRECT
COMMIT;
END //
DELIMITER ;