我试图找出这个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。我是否正确编写了此交易?
我刚刚解决了问题。我把事务放在过程中,还为SQL异常添加了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 ;