1

これが私がやろうとしていることの例です:

私は3つのテーブルを持っています:

  • 村 (ID、名前)
  • 世帯 (id、village_id)
  • 個人 (first_name、last_name、household_id)

同じ村に同姓同名の人が2人いないことを確認したいです。

基本的に私はそのようなことをしたいと思います:

ALTER TABLE persons 
 ADD UNIQUE (first_name, last_name, households.village_id 
            WHERE household_id=households.id)

そのようなことをする方法はありますか?

4

2 に答える 2

2

実際には直接行うことはできませんが、これが現実世界のデータを保存する場合、同じ名前の 2 人が同じ村に住むことは理論的に可能であるため、これは最善のアイデアではないでしょうか?

このルートをどうしても使いたい場合は、STORED PROCEDURE を使用して、ユーザー名や村などの引数を取得して、このテーブルへの挿入を処理することをお勧めします。ストアド プロシージャは、INSERT の前に SELECT を実行して競合をチェックできます。これは、INSERT クエリの代わりになります。衝突を防ぐために、UPDATE もプロシージャを介して処理する必要があります。

于 2013-03-27T12:18:11.300 に答える
2

それを行う簡単な方法はないと思います。

挿入/更新の前にトリガーを作成して、カスタム条件でエラーをスローすることをお勧めします。ただし、これは MySQL のバージョンに大きく依存します。バージョン 5.5 より前では、エラーを発生させる正しい方法はないと思います。通常、人々は存在しないプロシージャを呼び出すなどのハックを使用します。ただし、バージョン > 5.5 を使用している場合は、SIGNAL ステートメントを使用できます: http://dev.mysql.com/doc/refman/5.5/en/signal.html

于 2013-03-27T12:27:04.750 に答える