導入 - シーケンス
導入 - シーケンス – シーケンスとオートインクリメント
Description
シーケンスは、データレコード用にユニークな ID を取得する手段です。
多くの業務を例えば MySQL で行っている場合、シーケンスは、
AUTO_INCREMENT
を行う別の手段と考えであると考えて下さい。
シーケンス処理はかなり簡単で、最初に ID をリクエストし、
作成する新規レコードの ID フィールドに値を挿入します。
全てのテーブルに複数のシーケンスを有することが可能です。
ただし、特定のテーブルについては
同じシーケンスを常に使用する必要があることに注意して下さい。
このユニークな ID の値を取得するには、nextId()
を使用してください。
もし、シーケンスが存在しない場合は、自動で作成されます。
シーケンスは、
nextId() がコールされるたびに
自動でインクリメントされます。
<?php
// $db という名前の DB オブジェクトが作成済みであると仮定します...
$id = $db->nextId('mySequence');
if (PEAR::isError($id)) {
die($id->getMessage());
}
// INSERT クエリで ID を使用します
$res =& $db->query("INSERT INTO myTable (id, text) VALUES ($id, 'foo')");
?>
Note
PEAR DB のシーケンスメソッドを使用する場合には、シーケンスの作成も
含めたすべての処理にこれらのメソッドを用いることを強く推奨します。
DBMS で直接作成したシーケンスに対して PEAR DB のメソッドで
アクセスすることは避けてください。
もし何らかの理由があってこれが避けられない場合には、
PEAR DB のすべてのシーケンスメソッドに渡される引数
$seq_name
は、DB が元となる DBMS をコールする
前に変更されるということを知っておいてください。
$seq_name
は、PHP の
sprintf() 関数を使用して渡されます。この際に
seqname_format オプションを
sprintf() のフォーマット引数として使用します。
デフォルトの seqname_format は
%s_seq です。例えば
person_id_sequence を
$seq_name
に指定したとすると、シーケンスの
作成/アクセス/更新の際に PEAR DB はその名前を
person_id_sequence_seq に変更します。
seqname_format は、
connect() の際か、あるいは
setOption() を使用して変更可能です。
シーケンス名の中にクォートしないとクエリで使用できない文字がある場合は、
seqname_format を変更して
シーケンス名をクォートした形式で表すようにする必要があります。
たとえば、PostgreSQL でテーブル名に大文字を使っている場合は、
クエリでは "%s_seq" (クォートに注意)
としないとうまく動作しません。