「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 一意の制約とトリガーを使用して、データベースレコードの重複を防ぐにはどうすればよいですか?

一意の制約とトリガーを使用して、データベースレコードの重複を防ぐにはどうすればよいですか?

2025-02-26に投稿されました
ブラウズ:821

How Can I Prevent Duplicate Database Records Using Unique Constraints and Triggers?

一意の制約を使用して、レコードの重複を防止します

]

データベース操作では、特定の列の組み合わせの一意性を確保する必要があることがよくあります。たとえば、次の表を検討してください。

ID | Name | Active | PersonNumber

既存のテーブルに一意の制約を追加

] 既存のテーブルに一意の制約を追加するには、次の方法のいずれかを使用できます。

1を使用してテーブルを変更します

Table dbo.yourtablenameを変更します 制約uq_yourtablename inquine(column1、column2); を追加する

ALTER TABLE dbo.yourtablename
ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);

トリガーを使用して、繰り返し挿入を防ぐ

CREATE UNIQUE INDEX uq_yourtablename
ON dbo.yourtablename(column1, column2);

トリガーdbo.blockduplicatesyourtableを作成します dbo.yourtableで 挿入の代わりに として 始める nocountを設定します。 存在しない場合( 1を選択します iとして挿入された 内側の結合dbo.yourtableとしてt on i.column1 = t.column1 およびI.Column2 = T.Column2 )) 始める dbo.yourtable(column1、column2、...を挿入) column1、column2、...挿入から選択します。 終わり それ以外 始める 印刷 'アクションは実行されませんでした。 '; 終わり 終わり; 行く

例:PersonNumberとActiveの一意性を実装

CREATE TRIGGER dbo.BlockDuplicatesYourTable
ON dbo.YourTable
INSTEAD OF INSERT
AS
BEGIN
  SET NOCOUNT ON;

  IF NOT EXISTS (
    SELECT 1
    FROM inserted AS i
    INNER JOIN dbo.YourTable AS t
    ON i.column1 = t.column1
    AND i.column2 = t.column2
  )
  BEGIN
    INSERT dbo.YourTable(column1, column2, ...)
      SELECT column1, column2, ... FROM inserted;
  END
  ELSE
  BEGIN
    PRINT '未执行任何操作。'; -- 更友好的提示信息
  END
END;
GO
empdb;を使用します。 行く テーブルdbo.personを作成します ( id int ID(1,1)プライマリキー、 名前nvarchar(32)、 アクティブビット、 PersonNumber Int ); 行く Table Dbo.Personを変更します 制約uq_person unique(personnumber、active)を追加します。 行く

ここで、一意の制約に違反する挿入試行は、エラーメッセージで失敗し、同じPersonnumberおよびActive状態の重複レコードがないことを保証します。

印刷 'アクションは実行されませんでした。 '

ステートメントは、

印刷に置き換えられます。
            
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3