MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLストアドプロシージャでCOMMITを使用し、STARTトランザクションの下のトランザクションの1つが失敗するとどうなりますか?


クエリの1つが失敗またはエラーを生成し、MySQLが適切に実行された別のクエリが、適切に実行されたクエリの変更をコミットするとします。次のデータを持つテーブル「employee.tbl」を使用している次の例から理解できます-

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Mohan   |
| 2  | Gaurav  |
| 3  | Sohan   |
| 4  | Saurabh |
| 5  | Yash    |
+----+---------+
5 rows in set (0.00 sec)

mysql> Delimiter //

mysql> Create Procedure st_transaction_commit_save()
    -> BEGIN
    -> START TRANSACTION;
    -> INSERT INTO employee.tbl (name) values ('Rahul');
    -> UPDATE employee.tbl set name = 'Gurdas' WHERE id = 10;
    -> COMMIT;
    -> END //
Query OK, 0 rows affected (0.00 sec)

これで、このプロシージャを呼び出すと、テーブルにid =10がないため、UPDATEクエリでエラーが発生することがわかりました。ただし、最初のクエリは正常に実行されるため、COMMITは変更をテーブルに保存します。

mysql> Delimiter ;
mysql> Call st_transaction_commit_save()//
Query OK, 0 rows affected (0.07 sec)

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Mohan   |
| 2  | Gaurav  |
| 3  | Sohan   |
| 4  | Saurabh |
| 5  | Yash    |
| 6  | Rahul   |
+----+---------+
6 rows in set (0.00 sec)

  1. MySQLストアドプロシージャでの「@」記号の使用法は何ですか?

    ストアドプロシージャの@記号は、ユーザー定義のセッション変数に使用できます。まずテーブルを作成しましょう- mysql> create table DemoTable (    StudentName varchar(50) ); Query OK, 0 rows affected (1.30 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTable values('John Smith'); Query OK, 1 row affected (1.00 sec) m

  2. MySQLストアドプロシージャで区切り文字を正しく使用して値を挿入するにはどうすればよいですか?

    まずテーブルを作成しましょう- mysql> create table DemoTable2028    -> (    -> StudentFirstName varchar(20),    -> StudentLastName varchar(20)    -> ); Query OK, 0 rows affected (0.87 sec) これは、ストアドプロシージャを作成し、値を挿入するためのクエリです(区切り文字を正しく使用して)- mysql> delimiter