سؤال

وأنا أعمل في PHP.

يرجى ما هي الطريقة الصحيحة لإدراج سجلات جديدة في DB، التي لديها حقل فريد. أنا إدخال الكثير من السجلات في دفعة وأريد فقط جديدة لإدراج وأنا لا أريد أي خطأ لإدخال مكرر.

هل هناك طريقة فقط لجعل أول SELECT ولمعرفة ما إذا كان الإدخال بالفعل هناك قبل INSERT - ولادخال فقط عندما يعود SELECT أية سجلات؟ وآمل أن لا.

وأود أن أقول بطريقة أو بأخرى الخلية إلى تجاهل هذه إدراج دون أي خطأ.

وشكرا

هل كانت مفيدة؟

المحلول

ويمكنك استخدام INSERT ... تجاهل في بناء الجملة إذا كنت تريد أن تأخذ أي إجراء عندما يكون هناك سجل مكررة.

ويمكنك استخدام استبدال INTO جملة إذا كنت تريد الكتابة فوق السجل القديم بآخر جديد بنفس المفتاح.

وأو يمكنك استخدام INSERT ... ON DUPLICATE UPDATE KEY في بناء الجملة إذا كنت ترغب في إجراء تحديث إلى السجل بدلا من ذلك عندما واجهت نسخة مكررة.

وتحرير: أعتقد أنني أود أن أضيف بعض الأمثلة

أمثلة

ويقول لديك جدول يسمى tbl مع عمودين، id وvalue. هناك إدخال واحد، معرف = 1 والقيمة = 1. إذا قمت بتشغيل العبارات التالية:

REPLACE INTO tbl VALUES(1,50);

وأنت لا تزال لديها سجل واحد، مع معرف = 1 قيمة = 50. لاحظ أن السجل كله تم حذف الأول ولكن، ومن ثم إعادة إدخالها. ثم:

INSERT IGNORE INTO tbl VALUES (1,10);

وينفذ العملية بنجاح، ولكن يتم إدراج أي شيء. لا يزال لديك معرف = 1 و قيمة = 50. وأخيرا:

INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;

لديك الآن سجل واحد مع معرف = 1 والقيمة = 200.

نصائح أخرى

وماذا تبدو مثل مخطط قاعدة البيانات؟

هل يمكن إضافة عمود ID التي سوف زيادة للحصول على كل إدراج، لضمان صفوف فريدة من نوعها.

والسؤال: أنا إنشاء قاعدة بيانات مع العملاء. وأنا أعلم أن استخدام "إدراج" بيان لادخال المعلومات في قاعدة البيانات، ولكن كيف أتأكد من أنني لا أدخل نفس المعلومات العميل مرة أخرى؟

والجواب: يمكنك التأكد من أنك لم تقم بإدخال معلومات مكررة باستخدام المشرقية حالة

وعلى سبيل المثال، إذا كان لديك جدول يسمى عملاء مع مفتاح أساسي من CLIENT_ID، هل يمكن استخدام العبارة التالية:

INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);

وهذا البيان إدراج سجلات متعددة مع subselect.

إذا أردت إدراج سجل واحد، هل يمكن استخدام العبارة التالية:

INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);

واستخدام الجدول مزدوج يسمح لك بإدخال القيم الخاصة بك في بيان حدد، حتى لو لم يتم تخزين القيم حاليا في جدول.

http://www.techonthenet.com/sql/insert.php

وحاول إنشاء جدول مكرر، ويفضل أن يكون جدول مؤقت، دون قيد فريد والقيام تحميل الجزء الأكبر بك في هذا الجدول. ثم حدد فقط عناصر فريدة (متميزة) من الجدول المؤقت وإدراجها في الجدول الهدف.

$duplicate_query=mysql_query("SELECT * FROM student") or die(mysql_error());
$duplicate=mysql_num_rows($duplicate_query);
if($duplicate==0)
{
    while($value=mysql_fetch_array($duplicate_query)
    {
        if(($value['name']==$name)&& ($value['email']==$email)&& ($value['mobile']==$mobile)&& ($value['resume']==$resume))
        {
            echo $query="INSERT INTO student(name,email,mobile,resume)VALUES('$name','$email','$mobile','$resume')";
            $res=mysql_query($query);
            if($query)
            {
                echo "Success";
            }
            else
            {
                echo "Error";
            }
            else
            {
                echo "Duplicate Entry";
            }
        }
    }
}
else
{
    echo "Records Already Exixts";
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top