トランザクションのステートメント
-
BEGIN
: トランザクションの開始 -
COMMIT
: トランザクションの変更を確定し、データベースに保存します。 -
ROLLBACK
: トランザクションを取り消し、変更をロールバックします。 -
SAVEPOINT
: トランザクション内で保存点を設定します。SAVEPOINTステートメントを使用して、トランザクション内の特定のポイントにマーカーを設定し、後でそれに戻ることができる。 -
RELEASE SAVEPOINT
: トランザクション内で設定された保存点を解放する。 -
ROLLBACK TO SAVEPOINT
: トランザクション内で指定された保存点にロールバックする。
ロック
共有ロック(Shared Lock)
- 複数のトランザクションが同時にデータを読み取ることができるようにします。
- 共有ロックは、他のトランザクションが同じデータに対して排他ロック(Exclusive Lock)を取得できないようにします。
排他ロック(Exclusive Lock)
- トランザクションがデータを更新、削除、または挿入するときに使用。
- 排他ロックを取得したトランザクション以外は、そのデータに対して読み取りや書き込みの操作を行うことができません。
SELECT ... FOR UPDATE
文を使用
BEGIN; -- トランザクションを開始
-- 指定した行をロックして読み取ります
SELECT * FROM table_name WHERE condition FOR UPDATE;
-- ここでデータを更新、削除、または挿入の操作を行います
-- 例えばデータを更新する場合
UPDATE table_name SET column1 = value1 WHERE condition;
-- 例えばデータを削除する場合
DELETE FROM table_name WHERE condition;
-- 例えばデータを挿入する場合
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
COMMIT; -- トランザクションをコミットしてロックを解除します
LOCK文利用
BEGIN; -- トランザクションを開始
LOCK TABLE table_name IN SHARE ROW EXCLUSIVE MODE;
-- ここでデータを更新、削除、または挿入の操作を行います
-- 例えばデータを更新する場合
UPDATE table_name SET column1 = value1 WHERE condition;
-- 例えばデータを削除する場合
DELETE FROM table_name WHERE condition;
-- 例えばデータを挿入する場合
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
COMMIT; -- トランザクションをコミットしてロックを解除します