كيفية إدخال البيانات في SQL

0 الأسهم
0
0
0
0

مقدمة

توفر لغة الاستعلامات الهيكلية، المعروفة باسم SQL، مرونة كبيرة في كيفية إدراج البيانات في الجداول. على سبيل المثال، يمكنك تحديد صفوف بيانات فردية باستخدام الكلمة المفتاحية VALUES، ونسخ مجموعات بيانات كاملة من جداول موجودة باستخدام استعلامات SELECT، وتحديد الأعمدة بطريقة تُمكّن SQL من إدراج البيانات فيها تلقائيًا.

في هذا الدليل، سنستكشف كيفية استخدام صيغة INSERT INTO SQL لإضافة البيانات إلى الجداول باستخدام كل من هذه الطرق.

المتطلبات الأساسية

لمتابعة هذا الدليل، ستحتاج إلى جهاز كمبيوتر مُجهّز بنظام إدارة قواعد بيانات علائقية (RDBMS) يستخدم لغة SQL. تم التحقق من التعليمات والأمثلة الواردة في هذا الدليل باستخدام البيئة التالية:

  • خادم يعمل بنظام التشغيل Ubuntu 20.04، مع مستخدم غير جذر يتمتع بامتيازات إدارية وجدار حماية مُهيأ باستخدام UFW.
  • تم تثبيت MySQL وتأمينه على الخادم.

ستحتاج أيضًا إلى قاعدة بيانات وجدول للتدرب على إدخال البيانات فيهما. إذا لم يتوفر لديكما، يمكنك قراءة قسم "الاتصال بـ MySQL وإعداد قاعدة بيانات نموذجية" لمزيد من التفاصيل حول كيفية إنشاء قاعدة البيانات والجدول اللذين يستخدمهما هذا الدليل في الأمثلة.

الاتصال بـ MySQL وإعداد قاعدة بيانات نموذجية

إذا كان نظام قاعدة بيانات SQL الخاص بك يعمل على خادم بعيد، فقم بتسجيل الدخول إلى الخادم الخاص بك عبر SSH من جهازك المحلي:

ssh sammy@your_server_ip

ثم افتح موجه خادم MySQL واستبدل Sami باسم المستخدم الخاص بك في MySQL:

mysql -u sammy -p

إنشاء قاعدة بيانات تسمى insertDB:

CREATE DATABASE insertDB;

إذا تم إنشاء قاعدة البيانات بنجاح، فسوف تتلقى الإخراج التالي:

Query OK, 1 row affected (0.01 sec)

لتحديد قاعدة بيانات insertDB، قم بتشغيل العبارة USE التالية:

USE insertDB;
Output
Database changed

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

  • اسم:اسم كل موظف يتم التعبير عنه باستخدام نوع البيانات varchar بحد أقصى 30 حرفًا
  • موضع:يخزن هذا العمود عنوان الوظيفة لكل موظف، والذي يتم التعبير عنه مرة أخرى باستخدام نوع البيانات varchar بحد أقصى 30 حرفًا.
  • قسم:القسم الذي يعمل فيه كل موظف، يتم التعبير عنه باستخدام نوع البيانات varchar ولكن بحد أقصى 20 حرفًا فقط.
  • الأجر بالساعةعمود لتسجيل الأجر بالساعة لكل موظف يستخدم نظام البيانات العشري، بحيث لا يتجاوز طول القيم في هذا العمود أربعة أرقام، منها رقمان على يمين الفاصلة العشرية. وبالتالي، يتراوح نطاق القيم المسموح بها في هذا العمود بين -99.99 و99.99.
  • تاريخ البدءتاريخ تعيين كل موظف، مُعبَّر عنه باستخدام نوع بيانات "التاريخ". يجب أن تتوافق قيم هذا النوع مع التنسيق YYYY-MM-DD.

قم بإنشاء جدول يسمى factoryEmployees مع هذه الأعمدة الخمسة:

CREATE TABLE factoryEmployees (
name varchar(30),
position varchar(30),
department varchar(20),
hourlyWage decimal(4,2),
startDate date
);

وبهذا، تكون جاهزًا لمتابعة بقية الدليل والبدء في تعلم كيفية إدراج البيانات باستخدام SQL.

إدخال البيانات يدويا

الصيغة العامة لإدراج البيانات في SQL هي كما يلي:

INSERT INTO table_name
(column1, column2, . . . columnN)
VALUES
(value1, value2, . . . valueN);

لتوضيح ذلك، قم بتشغيل عبارة INSERT INTO التالية لتحميل جدول factoryEmployees بصف واحد من البيانات:

INSERT INTO factoryEmployees
(name, position, department, hourlyWage, startDate)
VALUES
('Agnes', 'thingamajig foreman', 'management', 26.50, '2017-05-01');
Output
Query OK, 1 row affected (0.00 sec)

تبدأ العبارة بالكلمة المفتاحية INSERT INTO، متبوعةً باسم الجدول الذي تريد إدراج البيانات فيه. يلي اسم الجدول قائمة بالأعمدة التي ستُدرج فيها العبارة البيانات، محاطة بأقواس. يلي قائمة الأعمدة الكلمة المفتاحية VALUES، متبوعةً بمجموعة من القيم محاطة بأقواس ومفصولة بفواصل.

لا يهم ترتيب إدراج الأعمدة. من المهم تذكر أن ترتيب القيم المُدخلة يجب أن يتطابق مع ترتيب الأعمدة. يحاول SQL دائمًا إدراج القيمة الأولى في العمود الأول المُدرج، والقيمة الثانية في العمود التالي، وهكذا. على سبيل المثال، تُضيف عبارة INSERT التالية صفًا آخر من البيانات، ولكنها تُدرج الأعمدة بترتيب مختلف:

INSERT INTO factoryEmployees
(department, hourlyWage, startDate, name, position)
VALUES
('production', 15.59, '2018-04-28', 'Jim', 'widget tightener');
Output
Query OK, 1 row affected (0.00 sec)

إذا لم تُحاذِ القيم بشكل صحيح، فقد يُدرج SQL بياناتك في الأعمدة الخاطئة. بالإضافة إلى ذلك، سيُصدر خطأً إذا تعارضت أيٌّ من القيم مع نوع بيانات العمود، كما في هذا المثال:

INSERT INTO factoryEmployees
(name, hourlyWage, position, startDate, department)
VALUES
('Louise', 'doodad tester', 16.50, '2017-05-01', 'quality assurance');
Output
ERROR 1366 (HY000): Incorrect decimal value: 'doodad tester' for column 'hourlyWage' at row 1

لاحظ أنه على الرغم من ضرورة تحديد قيمة لكل عمود تُحدده، ليس بالضرورة تحديد كل عمود في الجدول عند إضافة صف بيانات جديد. طالما لا يحتوي أيٌّ من الأعمدة التي تُسقطها على قيد قد يُسبب خطأً في هذه الحالة (مثل NOT NULL)، سيُضيف MySQL قيمة NULL إلى الأعمدة غير المحددة:

INSERT INTO factoryEmployees
(name, position, hourlyWage)
VALUES
('Harry', 'whatzit engineer', 26.50);
Output
Query OK, 1 row affected (0.01 sec)

إذا كنت ستُدرج صفًا بقيم لكل عمود في الجدول، فلن تحتاج إلى إدخال أسماء الأعمدة إطلاقًا. تذكر أن القيم التي تُدخلها يجب أن تكون متوافقة مع ترتيب الأعمدة المُعرّفة في تعريف الجدول.

في هذا المثال، يتم محاذاة القيم المدرجة بالترتيب الذي يتم به تعريف الأعمدة في عبارة CREATE TABLE لجدول factoryEmployee:

INSERT INTO factoryEmployees
VALUES
('Marie', 'doodad welder', 'production', 27.88, '2018-03-29');
Output
Query OK, 1 row affected (0.00 sec)

يمكنك أيضًا إضافة سجلات متعددة مرة واحدة عن طريق فصل كل صف بفاصلة، مثل هذا:

INSERT INTO factoryEmployees
VALUES
('Giles', 'gizmo inspector', 'quality assurance', 26.50, '2019-08-06'),
('Daphne', 'gizmo presser', 'production', 32.45, '2017-11-12'),
('Joan', 'whatzit analyst', 'quality assurance', 29.00, '2017-04-29');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

نسخ البيانات باستخدام عبارات SELECT

بدلاً من تحديد بيانات صفًا تلو الآخر، يمكنك نسخ عدة صفوف من البيانات من جدول واحد وإدراجها في جدول آخر باستخدام استعلام SELECT.

الصيغة الخاصة بهذا النوع من العمليات هي كما يلي:

INSERT INTO table_A (col_A1, col_A2, col_A3)
SELECT col_B1, col_B2, col_B3
FROM table_B;

بدلاً من اتباع قائمة الأعمدة باستخدام الكلمة المفتاحية VALUES، يتبعها هذا المثال النحوي بعبارة SELECT. تتضمن عبارة SELECT في هذا المثال النحوي شرط FROM فقط، ولكن أي استعلام صالح سيعمل.

للتوضيح، نفّذ عملية "إنشاء جدول" التالية لإنشاء جدول جديد باسم "showroomEmployees". لاحظ أن أسماء وأنواع بيانات أعمدة هذا الجدول هي نفسها أسماء وأنواع بيانات الأعمدة الثلاثة من جدول "factoryEmployees" المستخدمة في القسم السابق:

CREATE TABLE showroomEmployees (
name varchar(30),
hourlyWage decimal(4,2),
startDate date
);
Output
Query OK, 0 rows affected (0.02 sec)

يمكنك الآن تحميل هذا الجدول الجديد ببعض البيانات من جدول factoryEmployees الذي تم إنشاؤه مسبقًا عن طريق تضمين استعلام SELECT في عبارة INSERT INTO.

إذا أعاد استعلام SELECT نفس عدد الأعمدة بنفس الترتيب مثل الأعمدة في الجدول المستهدف، وكان لديهم أيضًا أنواع بيانات متطابقة، فيمكنك حذف قائمة الأعمدة من عبارة INSERT INTO:

INSERT INTO showroomEmployees
SELECT
factoryEmployees.name,
factoryEmployees.hourlyWage,
factoryEmployees.startDate
FROM factoryEmployees
WHERE name = 'Agnes';
Output
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0

تتضمن عبارة SELECT في هذه العملية شرط WHERE، مما يُرجع الاستعلام فقط الصفوف من جدول factoryEmployees التي يحتوي عمود اسمها على القيمة Agnes. ونظرًا لوجود صف واحد فقط في جدول المصدر، فسيتم نسخ هذا الصف فقط إلى جدول showroomEmployees.

للتحقق من ذلك، قم بتشغيل الاستعلام التالي لإرجاع كل سجل في جدول موظفي صالة العرض:

SELECT * FROM showroomEmployees;
Output
+-------+------------+------------+
| name | hourlyWage | startDate |
+-------+------------+------------+
| Agnes | 26.50 | 2017-05-01 |
+-------+------------+------------+
1 row in set (0.00 sec)

يمكنك إدراج عدة صفوف بيانات باستخدام أي استعلام يُرجع أكثر من صف واحد من الجدول المصدر. على سبيل المثال، يُرجع الاستعلام في العبارة التالية أي سجل في قاعدة بيانات factoryEmployees لا تبدأ قيمته في عمود الاسم بحرف J:

INSERT INTO showroomEmployees
SELECT
factoryEmployees.name,
factoryEmployees.hourlyWage,
factoryEmployees.startDate
FROM factoryEmployees
WHERE name NOT LIKE 'J%';
Output
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0

لإرجاع كل سجل في جدول موظفي صالة العرض، قم بتشغيل هذا الاستعلام مرة أخرى:

SELECT * FROM showroomEmployees;
+--------+------------+------------+
| name | hourlyWage | startDate |
+--------+------------+------------+
| Agnes | 26.50 | 2017-05-01 |
| Agnes | 26.50 | 2017-05-01 |
| Harry | 26.50 | NULL |
| Marie | 27.88 | 2018-03-29 |
| Giles | 26.50 | 2019-08-06 |
| Daphne | 32.45 | 2017-11-12 |
+--------+------------+------------+
6 rows in set (0.00 sec)

لاحظ وجود صفين متطابقين مع اسم أغنيس في عمود "الاسم". في كل مرة تُنفّذ فيها جملة INSERT INTO باستخدام SELECT، يُعامل SQL نتائج الاستعلام كمجموعة بيانات جديدة. ما لم تُفرض قيودًا مُحددة على جدولك أو تُنشئ استعلامات أكثر دقة، فلا يوجد ما يمنع تحميل قاعدة بياناتك بسجلات مُكررة عند إضافة بيانات كهذه.

إدراج المعلومات تلقائيًا

عند إنشاء جدول، يمكنك تطبيق سمات محددة على الأعمدة مما يؤدي إلى قيام نظام إدارة قواعد البيانات العلائقية بملئها بالبيانات تلقائيًا.

لتوضيح ذلك، نفّذ العبارة التالية لتعريف جدول يُدعى "interns". يُنشئ هذا جدولًا يُدعى "interns" بثلاثة أعمدة. العمود الأول في هذا المثال، "internID"، يحتوي على بيانات من نوع int. مع ذلك، تجدر الإشارة إلى أنه يتضمن أيضًا السمة AUTO_INCREMENT. تُمكّن هذه السمة SQL من إنشاء قيمة رقمية فريدة تلقائيًا لكل صف جديد، تبدأ من 1 افتراضيًا ثم تزداد بمقدار واحد مع كل سجل لاحق.

وبالمثل، يحتوي العمود الثاني، section، على الكلمة المفتاحية DEFAULT. إذا حذفتَ section من قائمة أعمدة جملة INSERT INTO، فسيؤدي ذلك إلى قيام نظام إدارة قواعد البيانات العلائقية بإدراج القيمة الافتراضية تلقائيًا - "production" في هذا المثال:

CREATE TABLE interns (
internID int AUTO_INCREMENT PRIMARY KEY,
department varchar(20) DEFAULT 'production',
name varchar(30)
);

لتوضيح هذه الميزات، حمّل جدول "المتدربين" ببعض البيانات بتنفيذ الأمر INSERT INTO التالي. تحدد هذه العملية قيم عمود "الاسم" فقط:

INSERT INTO interns (name) VALUES ('Pierre'), ('Sheila'), ('Francois');
Output
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0

ثم قم بتشغيل هذا الاستعلام لإرجاع كل سجل من الجدول:

SELECT * FROM interns;
Output
+----------+------------+----------+
| internID | department | name |
+----------+------------+----------+
| 1 | production | Pierre |
| 2 | production | Sheila |
| 3 | production | Francois |
+----------+------------+----------+
3 rows in set (0.00 sec)

يوضح هذا الإخراج أنه بسبب تعريفات الأعمدة، فإن عبارة INSERT INTO السابقة تضيف قيمًا إلى كل من القسمين الداخلي والخارجي، على الرغم من عدم تحديدها.

لإضافة قيمة أخرى غير القيمة الافتراضية إلى عمود قسم، يجب عليك تحديد هذا العمود في عبارة INSERT INTO، مثل هذا:

INSERT INTO interns (name, department)
VALUES
('Jacques', 'management'),
('Max', 'quality assurance'),
('Edith', 'management'),
('Daniel', DEFAULT);
Output
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0

لاحظ أن آخر صف من القيم المُقدّمة في هذا المثال يحتوي على الكلمة المفتاحية DEFAULT بدلاً من قيمة نصية. هذا يُؤدي إلى إدراج قاعدة البيانات للقيمة الافتراضية ('production'):

SELECT * FROM interns;
Output
+----------+-------------------+----------+
| internID | department | name |
+----------+-------------------+----------+
| 1 | production | Pierre |
| 2 | production | Sheila |
| 3 | production | Francois |
| 4 | management | Jacques |
| 5 | quality assurance | Max |
| 6 | management | Edith |
| 7 | production | Daniel |
+----------+-------------------+----------+
7 rows in set (0.00 sec)

نتيجة

من خلال قراءة هذا الدليل، تعلمت عدة طرق مختلفة لإدراج البيانات في جدول، بما في ذلك تحديد صفوف فردية من البيانات باستخدام الكلمة الأساسية VALUES، ونسخ مجموعات البيانات بالكامل باستخدام استعلامات SELECT، وتحديد الأعمدة التي سيقوم SQL بإدراج البيانات فيها تلقائيًا.

يجب أن تعمل الأوامر المذكورة هنا على أي نظام إدارة قواعد بيانات يستخدم SQL. تذكر أن كل قاعدة بيانات SQL تستخدم تطبيقها الخاص للغة، لذا يُرجى مراجعة وثائق نظام إدارة قواعد البيانات لديك للحصول على شرح أكثر شمولاً لكيفية التعامل مع عبارة INSERT INTO والخيارات المتاحة لها.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *


قد يعجبك أيضاً

كل ما تحتاج إلى معرفته حول واجهة برمجة تطبيقات Firestore الخاصة بـ Google Cloud

تُعد Google Firestore واحدة من أشهر قواعد بيانات NoSQL السحابية في العالم، والمقدمة من Firebase وGoogle Cloud. تتميز Firestore بتوافقها مع بناء التطبيقات الفورية، وقابليتها للتطوير، وسرعتها الفائقة، وعدم الحاجة إلى إدارة الخوادم. تتوفر هذه القاعدة مع واجهة برمجة تطبيقات REST وgRPC ومجموعة متنوعة من حزم تطوير البرامج (SDKs)، وتحظى بشعبية كبيرة بين مطوري الأجهزة المحمولة والويب والواجهات الخلفية. في هذه المقالة، سنقدم Firestore بشكل شامل وشامل، مع أمثلة عملية، ومشاريع يمكن بناؤها باستخدامها، وأمثلة على تطبيقات ناجحة، وبنيتها، وأمانها، وأفضل الممارسات.