[pgsql-jp: 34700] 重複登録を制限する方法
choice
choice-site @ choice-site.com
2005年 1月 20日 (木) 19:11:03 JST
中出と申します。
以下のようなテーブルに会員データを重複なしにデータを
登録したいと思っています。(nameとemailが同じデータは
登録したくない)
create table test(
id serial primary key,
name varchar(50),
email varchar(100)
);
それで以下のような感じのSQLを発行しようと思っています。
---
begin transaction;
lock table test in EXCLUSIVE MODE;
select id from test where name='名前' and email='メルアド';
データがあれば
rollback;
データがなければ
insert into test(name,email) values('名前','メルアド');
commit transaction;
---
ここで、ふと思ったのですが、testテーブルに
UNIQUE ("name","email")
のような制約をつけておけば、テーブルをロックしなくても
いいのではないかと。
そこで質問なんですが、アクセスの多いサイトの場合、
lockを使ったほうが負荷が低くすむのでしょうか?
それともuniqueを使ったほうが負荷が低くすむのでしょうか?
ご存知の方がおられましたらご教示いただければ幸いです。
また、他に負荷が低く納まるような方法がございましたら
教えてくださいませ。
なお、postgresのバージョンは7.2.3です。
以上、よろしくお願いします。
----
nakade
pgsql-jp メーリングリストの案内