【素朴な疑問】Oracleシーケンスのロック問題をシミュレーションしてみます。
急いで使用するので、ロック機構については今後詳しく学びます。
MYSQL は ORACLE の順序をシミュレートします。
CREATE TABLE `pb_sequence` (
`sequence_id` int(11) NOT NULL DEFAULT '0',
`sequence_name` varchar(25) DEFAULT NULL,
`sequence_value` bigint(20) DEFAULT NULL,
`sequence_type` varchar(20) DEFAULT NULL,
PRIMARY KEY (`sequence_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
sequence_name: シーケンスの名前
sequence_value: シーケンス値
I am getting select sequence_value from pb_sequence where sequence_name= 'mysql_sequence'
クエリを実行するときは、このレコードをロックする必要があることは誰もが知っています。 誰もこの記録をクエリすることはできません。 そうしないと、データに不整合が生じます。
次に、pb_sequence を更新します。 set sequence_value = sequence_value +1 where sequence_name= 'mysql_sequence'
更新してロックを解放するまで待ちます。
----------------------
この文を PDO を使って書けますか? これはPDOと関係があるのでしょうか? それとも単に SQL ステートメントに関連しているのでしょうか? PDO はトランザクションを開くことしかできないと思うからです。
PDO には、クエリ時に他のユーザーをブロックできる設定がないようです?
-----解決策---------
更新のために ... を選択してください
http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html