MySql PHP 存储过程、事务和回滚
MySql PHP stored procedures, transactions and rollbacks
我正在使用存储过程对 Mysql DB
执行 CRUD 操作
DELIMITER $$
CREATE PROCEDURE `transaction_sp` ()
BEGIN
DECLARE exit handler for sqlexception
BEGIN
-- ERROR
ROLLBACK;
END;
DECLARE exit handler for sqlwarning
BEGIN
-- WARNING
ROLLBACK;
END;
START TRANSACTION;
INSERT INTO table_name (id, name, address) values ('1','Test','xpert.com');
SET @LID = LAST_INSERT_ID();
INSERT INTO table_name3 (id, job, responsibilities) values
(@LID,'Sr. Developer','Coding,mentoring etc');
COMMIT;
END
$$
现在,我希望如果第二个 INSERT 语句失败,则第二个 SQL 语句不执行,第一个 Insert 语句回滚。
使用我的上述方法,第一笔交易不会回滚。我需要设置任何标志吗?
如何处理?解释清楚的答案会有所帮助。
请看下面我的回答。我相信如果你在每次插入后检查 @@ROWCOUNT
或 @@Error
如果没有行受到影响,你可以回滚。如果我使用的方法有误,请见谅。
DELIMITER $$
CREATE PROCEDURE `transaction_sp` ()
BEGIN
DECLARE @nRowCount1 int,
@nRowCount2 int
DECLARE exit handler for sqlexception
BEGIN
-- ERROR
ROLLBACK;
END;
DECLARE exit handler for sqlwarning
BEGIN
-- WARNING
ROLLBACK;
END;
START TRANSACTION;
INSERT INTO table_name (id, name, address) values ('1','Test','xpert.com');
SET @LID = LAST_INSERT_ID();
SET @nRowCount1 = @@ROWCOUNT ;
INSERT INTO table_name3 (id, job, responsibilities) values
(@LID,'Sr. Developer','Coding,mentoring etc');
SET @nRowCount2 =@@ROWCOUNT
if(@nRowCount1 <=0 and @nRowCount2<=0)
begin
ROLLBACK ;
end
COMMIT;
END
$$
我正在使用存储过程对 Mysql DB
DELIMITER $$
CREATE PROCEDURE `transaction_sp` ()
BEGIN
DECLARE exit handler for sqlexception
BEGIN
-- ERROR
ROLLBACK;
END;
DECLARE exit handler for sqlwarning
BEGIN
-- WARNING
ROLLBACK;
END;
START TRANSACTION;
INSERT INTO table_name (id, name, address) values ('1','Test','xpert.com');
SET @LID = LAST_INSERT_ID();
INSERT INTO table_name3 (id, job, responsibilities) values
(@LID,'Sr. Developer','Coding,mentoring etc');
COMMIT;
END
$$
现在,我希望如果第二个 INSERT 语句失败,则第二个 SQL 语句不执行,第一个 Insert 语句回滚。
使用我的上述方法,第一笔交易不会回滚。我需要设置任何标志吗?
如何处理?解释清楚的答案会有所帮助。
请看下面我的回答。我相信如果你在每次插入后检查 @@ROWCOUNT
或 @@Error
如果没有行受到影响,你可以回滚。如果我使用的方法有误,请见谅。
DELIMITER $$
CREATE PROCEDURE `transaction_sp` ()
BEGIN
DECLARE @nRowCount1 int,
@nRowCount2 int
DECLARE exit handler for sqlexception
BEGIN
-- ERROR
ROLLBACK;
END;
DECLARE exit handler for sqlwarning
BEGIN
-- WARNING
ROLLBACK;
END;
START TRANSACTION;
INSERT INTO table_name (id, name, address) values ('1','Test','xpert.com');
SET @LID = LAST_INSERT_ID();
SET @nRowCount1 = @@ROWCOUNT ;
INSERT INTO table_name3 (id, job, responsibilities) values
(@LID,'Sr. Developer','Coding,mentoring etc');
SET @nRowCount2 =@@ROWCOUNT
if(@nRowCount1 <=0 and @nRowCount2<=0)
begin
ROLLBACK ;
end
COMMIT;
END
$$