SQLنسخ البيانات في جدول آخر
- طريقة نسخ البيانات من جدول إلى جدول
- تجهيز قاعدة البيانات التي سنطبق عليها
- مثال حول إنشاء نسخة من بنية الجدول
- أمثلة حول نسخ البيانات من جدول إلى جدول
طريقة نسخ البيانات من جدول إلى جدول
قد تحتاج لإنشاء نسخة من الجدول إذا كنت تريد إجراء اختبار ما أو في حال أردت إنشاء نسخة ثانية منه بهدف التدقيق ( Auditing )، أي لمراقبة أي تعديل يتم في الجدول الأساسي.
لنسخ البيانات من جدول لآخر يجب أن يكون نوع الأعمدة التي سيتم النسخ منها متطابق مع نوع الأعمدة التي سيتم النسخ إليها.
عند نسخ البيانات من جدول لآخر تستطيع تحديد الأسطر و الحقول التي سيتم نسخها، أي لست مجبر على نسخ كل بيانات الجدول في جدول آخر. بالإضافة إلى ذلك فإن نسخ القيم من جدول لآخر لا يؤثر إطلاقاً على القيم الموجودة في الجدول الذي سيتم النسخ إليه.
1- طريقة إنشاء نسخة من بنية الجدول
بشكل عام، يمكنك إنشاء الجدول الذي سيتم وضع نسخة من البيانات فيه باستخدام الأمر CREATE TABLE كما يلي و هذه الطريقة تعمل في جميع أنواع قواعد البيانات.
بما أننا نسخدم قواعد بيانات MySQL يمكنك استخدام الأسلوب التالي المتاح فيها و الذي يمكن من خلاله بناء نسخة مطابقة من أي جدول بسهولة.
- مكان الكلمة
original_table
نضع إسم الجدول الذي نريد إنشاء نسخة منه. - مكان الكلمة
new_table
نضع إسم الجدول الجديد الذي نريد إنشاؤه.
النسخة التي يتم بناؤها من الجدول الأصلي تتضمن نفس أسماء و خصائص أعمدته بالإضافة لأي فهرس موجود فيه.
2- طريقة نسخ البيانات في الجدول الثاني
نسخ البيانات من جدول لآخر يتم من خلال إحضارها من الجدول الأصلي بواسطة الأمر SELECT و إضافتها في الجدول الآخر بواسطة الأمر INSERT INTO.
إذا كان الجدولين متطابقين في البنية، سيكون شكل الإستعلام سيكون كما يلي.
إذا كان الجدولين غير متطابقين في البنية، سيكون عليك تحديد الأعمدة التي سيتم النسخ منها و إليها كما لي.
- مكان الكلمة
table1
نضع إسم الجدول الذي سننسخ البيانات منها. - مكان الكلمة
table2
نضع إسم الجدول الذي سننسخ البيانات فيه. - بعد الكلمة WHERE يمكننا وضع شروط لتحديد القيم التي سيتم نسخها من الجدول
table1
.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash
و فيها جدول إسمه employees
يحتوي على بيانات 5 موظفين..
مثال
فيما يلي البيانات التي قمنا بإضافتها في الجدول employees
.
id | user | gender | country | salary |
---|---|---|---|---|
1 | rami | male | Lebanon | 700.00 |
2 | ahmad | male | Syria | 800.00 |
3 | hanan | female | KSA | 750.00 |
4 | saly | female | Lebanon | 650.00 |
5 | samir | male | Egypt | 600.00 |
مثال حول إنشاء نسخة من بنية الجدول
الإستعلام التالي يقوم بإنشاء نسخة من بنية الجدول employees
في نفس قاعدة البيانات و إسمها employees_copy
.
مثال
في قواعد بيانات MySQL يمكنك استخدام الأسلوب التالي.
أو يمكنك تعريف الجدول الجديد تماماً كما قمت بتعريف الجدول الأصلي كما يلي.
الجدول الذي employees_copy
الذي قمنا بإنشائه سيكون مشابه للجدول الأصلي و لكنه فارغ كما يلي.
id | user | gender | country | salary |
---|---|---|---|---|
أمثلة حول نسخ البيانات من جدول إلى جدول
الإستعلام التالي يقوم بنسخ كل البيانات الموجودة في الجدول employees
و يضيفها في الجدول employees_copy
.
المثال الأول
النتيجة
النتيجة تعني أنه تم نسخ البيانات بنجاح في الجدول الجديد.
إذا قمت بعرض جميع البيانات الموجودة في الجدول employees_copy
فتسجد أنه أصبح عبارة نسخة مطابقة للجدول employees
.
id | user | gender | country | salary |
---|---|---|---|---|
1 | rami | male | Lebanon | 700.00 |
2 | ahmad | male | Syria | 800.00 |
3 | hanan | female | KSA | 750.00 |
4 | saly | female | Lebanon | 650.00 |
5 | samir | male | Egypt | 600.00 |
إذا حاولت إضافة الأسطر نفسها في الجدول employees_copy
من جديد سيظهر لك الخطأ Duplicate entry '1' for key 'PRIMARY' و الذي يعني أنه لا يمكنك إعادة إضافة البيانات من جديد بسبب أن الحقل id
ممنوع أن يكون فيه قيم مكررة.
للدقة أكثر فإنه بمجرد محاولة وضع العدد 1
من جديد في العمود id
فإن خادم قاعدة البيانات سيمنع ذلك.
الإستعلام التالي يحاول إعادة نسخ كل البيانات الموجودة في الجدول employees
و إضافتها في الجدول employees_copy
من جديد.
المثال الثاني
النتيجة
النتيجة تعني أنه فشل في عملية النسخ بسبب أن القيمة 1 لا يمكن تكرارها في العمود id
.
لحل المشكلة السابقة، يمكنك تحديد أي أعمدة تريد أن يتم النسخ من الجدول employees
و في أي أعمدة سيتم إضافتها في الجدول employees_copy
.
تذكر: تستطيع إعادة نسخ جميع البيانات باستثناء البيانات التي يمكن أن يتم تكرارها في العمود.
الإستعلام التالي يقوم بنسخ كل القيم الموجودة في الجدول employees
باستثناء القيم الموضوعة في العمود id
.
ما فعلناه هنا، هو ترك قاعدة البيانات تقوم بإعطاء القيم بشكل تلقائي للعمود id
لكل سطر يتم إضافته لأن نوع العمود بالأساس هو AUTO_INCREMENT و هكذا سنتمكن من نسخ كل القيم من جديد في الجدول employees
بدون أي مشاكل.
المثال الثالث
إذا قمت بعرض جميع البيانات الموجودة في الجدول employees_copy
فتسجد أنه تم إضافة بيانات الجدول employees
فيه من جديد و لكن هذه المرة تم إعطاء رقم تعرفة id
مختلف لكل سطر بشكل تلقائي.
id | user | gender | country | salary |
---|---|---|---|---|
1 | rami | male | Lebanon | 700.00 |
2 | ahmad | male | Syria | 800.00 |
3 | hanan | female | KSA | 750.00 |
4 | saly | female | Lebanon | 650.00 |
5 | samir | male | Egypt | 600.00 |
6 | rami | male | Lebanon | 700.00 |
7 | ahmad | male | Syria | 800.00 |
8 | hanan | female | KSA | 750.00 |
9 | saly | female | Lebanon | 650.00 |
10 | samir | male | Egypt | 600.00 |