我试图找到这个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。 我是否正确地写了这笔交易?
答案 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 ;