2016-06-23 9 views
-1

データは操作が正常に完了したときにのみデータベースにコミットされている場合、我々は指定された例のコミットとロールバック

  1. チェックツーcheck(ソートの)を置くことができます。

  2. トランザクションが失敗した場合は、データをロールバックする必要があります。

このワン

DELIMITER $$ 

CREATE PROCEDURE `sp_fail`() 
BEGIN 
    DECLARE `_rollback` BOOL DEFAULT 0; 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1; 
    START TRANSACTION; 
    UPDATE customer SET age= 20 WHERE name='stark'; 
    UPDATE customer SET age= 20 WHERE name='brian'; -- fail as there is no name as brian in the table customer 
    IF `_rollback` THEN 
     SELECT 'The transaction has failed' AS 'Result'; 
     ROLLBACK; 
    ELSE 
     SELECT 'The transaction was successful' AS 'Result'; 
     COMMIT; 
    END IF; 
END$$ 

DELIMITER ; 

ようstackoverflowのitself.Iで回答の一つのその鉱山変更されたバージョンは、上記の点に言及したが、ときに私が呼び出しを解決するために、これを使用して考えていましたプロシージャは正常に実行されますが、行は影響を受けません。なぜですか? ありがとうございます。

+0

あなたの質問はあまりにも曖昧です。詳細を追加してください。 – Drew

+1

[this](http://dev.mysql.com/doc/refman/5.7/en/commit.html)のようになりますか? – PaulF

答えて

0

mysqlに自動コミットプロパティがあります。 AUTOCOMMIT = 0(これはautocommitをfalseに設定します)を設定する必要があります。その後、条件に従って問合せの最後にCOMMITまたはROLLBACKを発行できます。

1. INSERT INTO table_name ...; 

2. COMMIT; -- confirm your changes 

     OR 

3. ROLLBACK; -- undo your changes