"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني منع سجلات قاعدة البيانات المكررة باستخدام قيود ومحفزات فريدة؟

كيف يمكنني منع سجلات قاعدة البيانات المكررة باستخدام قيود ومحفزات فريدة؟

نشر في 2025-02-26
تصفح:433

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

استخدم قيودًا فريدة لمنع السجلات المكررة

]

في عمليات قاعدة البيانات ، غالبًا ما يكون من الضروري ضمان تفرد مجموعات أعمدة محددة. على سبيل المثال ، ضع في اعتبارك الجدول التالي:

ID | Name | Active | PersonNumber

إضافة قيود فريدة إلى الجداول الموجودة

] لإضافة قيد فريد إلى جدول موجود ، يمكنك استخدام إحدى الطرق التالية:

1.

تغيير جدول dbo.yourtablename أضف قيود uq_yourtablename فريدة من نوعها (العمود 1 ، العمود 2) ؛

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

استخدم المشغلات لمنع الإدراج المتكرر

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

إنشاء trigger dbo.blockduplicatesyourtable على dbo.yourtable بدلا من الإدراج مثل يبدأ تعيين nocount على ؛ إذا لم يكن موجودًا ( حدد 1 من إدراج أنا Inner Join DBO.yourtable as t على I.Column1 = T.Column1 و i.column2 = T.Column2 ) يبدأ أدخل dbo.yourtable (العمود 1 ، العمود 2 ، ...) حدد العمود 1 ، العمود 2 ، ... من إدراج ؛ نهاية آخر يبدأ طباعة 'لم يتم تنفيذ أي إجراء. '؛ نهاية نهاية؛ يذهب

مثال: تنفيذ التفرد للشخص النشط والنشط

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

استخدم tempdb ؛ يذهب إنشاء جدول dbo.person (( ID int Identity (1،1) المفتاح الأساسي ، اسم nvarchar (32) ، بت نشط ، شخص شخص ما ) ؛ يذهب تغيير الجدول dbo.person إضافة القيد uq_person فريد (شخص ، نشط) ؛ يذهب

الآن ، ستفشل أي محاولة إدراج تنتهك القيد الفريد برسالة خطأ ، مما يضمن عدم وجود سجل مكرر مع نفس العدد والحالات النشطة.

print 'لم يتم تنفيذ أي إجراء. يستبدل عبارة "

الطبع
 لم يفعل شيئًا."  في النص الأصلي لتسهيل الفهم. 
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3