2

これは、この質問のパート 2 のようなものです: GORM で複数の一意の列を作成する際の問題

多数のフィールド (description、is_active、deleted_at) に対して一意の制約を持つテーブルを作成しました。そのような行で動作することがわかりました:

id| 説明 | is_active | 削除された_at  
1 | 説明1 | 真 | 2000/01/01
2 | 説明1 | 真 | 2000/01/01

そして、このようには機能しません:

id| 説明 | is_active | 削除された_at  
1 | 説明1 | 真 | ヌル
2 | 説明1 | 真 | ヌル

また、NULL 値を持つ行も複製したくありません。そのための回避策はありますか?

4

1 に答える 1

3

13.1.14. CREATE TABLE 構文

UNIQUE インデックスは、インデックス内のすべての値が個別でなければならないという制約を作成します。既存の行と一致するキー値を持つ新しい行を追加しようとすると、エラーが発生します。すべてのエンジンで、UNIQUE インデックスは、NULL を含むことができる列に複数の NULL 値を許可します。

deleted_at回避策として、デフォルト値 0 で列をヌル不可にすることを試みることができます

deleted_at NOT NULL DEFAULT 0

そして、それを中心にクエリとアプリ ロジックを構築します。

別のオプションは、トリガーを使用してこの制約を適用することです。

于 2013-03-05T08:48:02.913 に答える