0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

トランザクションのステートメント

Posted at

トランザクションのステートメント

  • 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; -- トランザクションをコミットしてロックを解除します
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?