フレームワークがトランザクションのネストを処理する方法について多くの悩みがありましたが、トランザクションが開始された場合に返されるmySql RDMSに対する実行可能なクエリがあるかどうかはわかりませんでした。それは可能ですか?おかげ接続がトランザクションを開始した場合、mySqlを照会する方法はありますか?
0
A
答えて
2
は、それは少しトリッキーですが、それはもうaviableであるとして、あなたはどのように私は、@ wonk0リンクここにコピーしていますhttp://forge.mysql.com/tools/tool.php?id=145
0
でこれを行うための例を見つけることができません。
DELIMITER $$
CREATE PROCEDURE `myexample` (
OUT errno INT,
OUT error VARCHAR(255)
)
BEGIN
DECLARE need_to_commit BOOL DEFAULT FALSE;
main:BEGIN
-- for example, catch duplicate key errors and roll back
DECLARE EXIT HANDLER FOR 1062
BEGIN
ROLLBACK TO SAVEPOINT myexample;
SET errno = 1060,
error = 'Duplicate key.';
END;
-- catch any other errors that should cause automatic rollbacks
-- ------
-- set up the savepoint/trx handler
--
DECLARE CONTINUE HANDLER FOR 1305
BEGIN
START TRANSACTION;
SET need_to_commit = TRUE;
END;
-- this will have no effect if we are not in a trx
SAVEPOINT myexample;
-- this will error if we are not in a trx, be caught above, and start a trx
-- it will do nothing if we are already in a trx
RELEASE SAVEPOINT myexample;
-- this will always set a savepoint
-- because we are now guaranteed to be in a trx
SAVEPOINT myexample;
--
-- done setting up savepoint/trx
-- ------
-- initialize the OUT parameters
SET errno = 0,
error = '';
-- do some stuff
INSERT INTO mytable VALUES (1);
INSERT INTO yourtable VALUES (2);
-- you can even handle your own errors (without handlers!)
IF (0 != 1) THEN
ROLLBACK TO SAVEPOINT myexample;
SET errno = 1234,
error = 'Zero is not one!';
LEAVE main;
END IF;
END; -- main
-- if we were not in a transaction to start with
-- we should not leave one dangling, so commit here
IF need_to_commit THEN
COMMIT;
END IF;
END $$
DELIMITER ;
/*
EXAMPLE
mysql> create table mytable (a int primary key) engine=innodb;
Query OK, 0 rows affected (0.07 sec)
mysql> create table yourtable (b int primary key) engine=innodb;
Query OK, 0 rows affected (0.03 sec)
mysql> call myexample(@e,@r); select @e,@r;
Query OK, 0 rows affected (0.00 sec)
+------+------------------+
| @e | @r |
+------+------------------+
| 1234 | Zero is not one! |
+------+------------------+
1 row in set (0.00 sec)
mysql> select * from mytable union select * from yourtable;
Empty set (0.00 sec)
mysql> insert into yourtable values (2);
Query OK, 1 row affected (0.00 sec)
mysql> call myexample(@e,@r); select @e,@r;
Query OK, 0 rows affected (0.00 sec)
+------+----------------+
| @e | @r |
+------+----------------+
| 1060 | Duplicate key. |
+------+----------------+
1 row in set (0.00 sec)
mysql> select * from mytable union select * from yourtable;
+---+
| a |
+---+
| 2 |
+---+
1 row in set (0.00 sec)
*/
関連する問題
- 1. mysql接続。私はそれを生かしておくか、各トランザクションの前に新しい接続を開始する必要がありますか?
- 2. テーブルの接続を照会する方法がありません
- 3. 接合テーブルを照会する方法
- 4. Pyramidでトランザクションを自動的に開始する方法はありますか?
- 5. HSQL DBでDB間照会を開始する方法は?
- 6. 直接子孫のみを照会する方法はありますか?
- 7. Elasticsearch:接続数を照会する方法は?
- 8. 基本となるmysql接続が失われた後で(長い)トランザクションを再開する方法はありますか?
- 9. 私のAndroidウェアがMYSQLに接続する方法はありますか?
- 10. mysqlに存在しない可能性のある列を照会する方法はありますか?
- 11. MVCアーキテクチャ/ SoC:コントローラがDBトランザクションを開始する必要がありますか?
- 12. 1行にいくつの接続があるかを調べるためにデータを照会する方法はありますか?
- 13. ネストされたリストのアイテムを照会する方法はありますか?
- 14. Django複雑な照会(組合が必要な場合があります)
- 15. WCFの安全な接続はTLS 1.2プロトコルとの接続を開始する必要があります
- 16. mysqlの接続時間を確認する方法はありますか?
- 17. MySQL Json Arrayを照会する方法
- 18. MySQLからクライアント接続を開始する
- 19. 接続がすでに開いている場合は、OracleConnection.Open()をコールしても問題ありませんか?
- 20. ドメイン名を照会するための公開Webサービスはありますか?
- 21. Pythonで接続するときのデフォルトのMysql接続タイムアウトを変更する方法はありますか?
- 22. 接続あたりのPostgres同時トランザクション
- 23. nullの場合のMySQL照会順序
- 24. Springスケジューラ - 循環依存関係がある場合、スケジューリングされたメソッドはトランザクションで開始しません。
- 25. 私はDataContextを使用する場合、データベースへの接続が開始されますか?
- 26. Spring @トランザクションがトランザクションを開始しない
- 27. Hibernate @トランザクションがトランザクションを開始しない
- 28. どの場合、TCP接続を終了する必要がありますか?
- 29. ExecuteNonQueryでは、コマンドに割り当てられた接続が保留中のローカルトランザクションにある場合に、コマンドをトランザクションにする必要があります。
- 30. TCP接続あたりのリクエスト数が最大の場合は
'show full processlist;'何とか役立つかもしれません。 – Igor
@Igor nop、私は次のようにします:show full processlist; START TRANSACTION; は完全なプロセスリストを表示します。 と変更なし –