teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

質門の意図を明確にするために追記しました

2018/01/09 07:02

投稿

ockeghem
ockeghem

スコア11710

title CHANGED
File without changes
body CHANGED
@@ -4,4 +4,9 @@
4
4
 
5
5
  通常の排他制御では、行ロック等を使用して列値の重複を防止するわけですが、これからINSERTしようという値の場合は、まだ値がないので、行ロックはかけられないと思います。
6
6
 
7
- ということで、一意制約を使わないで一意性を保証するINSERT方法についてお伺いします。
7
+ ということで、一意制約を使わないで一意性を保証するINSERT方法についてお伺いします。
8
+
9
+ ---
10
+
11
+ すみません、意図が通じにくいようですので追記します。
12
+ 例えば、列 userid にログインIDを保存するとして、これは一意である必要があります。ところが、なんらかの理由(私がヒアリングした事例だと論理削除をする都合等)で一意制約をつけられない場合、SQLの工夫で userid に重複したIDが登録されることを防ぐ(たとえば、userid として tanaka が二重に登録されることを防ぐ) にはどうすればよいかという質門です。

1

SQLについての質門であることが明確になるように加筆しました

2018/01/09 07:02

投稿

ockeghem
ockeghem

スコア11710

title CHANGED
@@ -1,1 +1,1 @@
1
- 一意制約のない列の一意性を保証してINSERTする方法
1
+ [SQL]一意制約のない列の一意性を保証してINSERTする方法
body CHANGED
@@ -1,4 +1,4 @@
1
- 一意であることを保証しなければならない列については、教科書的には一意制約をつけろということで終わりかと思いますが、現実には一意である必要はあるのに一意制約がついていないケースはよく見かけます。著名ソフトの例としては、WordPress、Joomla!、MovableType等のユーザIDには、DBの一意制約はつけられていますせん。
1
+ SQLにおいて、一意であることを保証しなければならない列については、教科書的には一意制約をつけろということで終わりかと思いますが、現実には一意である必要はあるのに一意制約がついていないケースはよく見かけます。著名ソフトの例としては、WordPress、Joomla!、MovableType等のユーザIDには、DBの一意制約はつけられていますせん。
2
2
 
3
3
  セキュリティの観点からは、「一意制約つけましょうね」で終わらせてもいいところですが、なんらかの理由で一意制約をつけられない(つけたくない)状況で、特定列の一意性を保証する方法のベスト・プラクティスは知られているのでしょうか?
4
4