إدارة قاعدة البيانات MySQL | الاوامر الأساسية

hocine
Hocine Gasmi
Back-end Developer (Python/Django)
03/09/2021 |برمجة 💻
إدارة قاعدة البيانات MySQL | الاوامر الأساسية

قاعدة البيانات عنصر اساسي لا يُستغنى عنه في مجال التكنولوجيا في وقتنا هذا, تَعلٌّم ادارة قاعدة البيانات مهارة ضرورية ستكون ذات نفع كبير لدى اي شخص في مجال تكنولوجيا الحاسوب.

قاعدة البيانات هي مجموعة منظمة من البيانات المخزنة إلكترونيًا, هناك العديد من خوادم قاعدة البيانات والعميل المتاحة مثل Oracle و MySQL و MySQLi و MariaDB و MongoDB و اخرى. إتقان واحد يعني التحكم في معظمها وتعلم استفسارات قاعدة البيانات أمر سهل وممتع للغاية.

سنبدأ باشياء سهلة و بسيطة, سوف نستعمل MySQL. يتوفر ايضا في نضام التشغيل لينكس الذي سوف نقوم بتثبيته عليه, يمكنك تثبيته على نضام التشغيل الذي تريده.

 

تثبيت MySQL

يمكنك تثبيت MySQL على النضام الذي تختاره (Windows, macOS, Solaris, ..) في مثالنا هذا قمنا باستعمال Linux.

سوف نستعمل apt لتثبيت MySQL.

$ sudo apt-get install mysql-server

يؤدي هذا إلى تثبيت الحزمة لخادم MySQL ، بالإضافة إلى الحزم الخاصة بالعميل والملفات العامة لقاعدة البيانات.

 

بدء MySQL

للتاكد من انّ MySQL مشغل نقوم بالامر التالي:

$ systemctl status mysql

يمكنك استعمال الخيارات التالية للبدء (start), ايقاف (stop), اعادة البدء (restart) او الحالة (status).

$ systemctl start mysql
# او
$ systemctl restart mysql
# او
$ systemctl stop mysql

بمجرد الانتهاء من تثبيت الخادم وبدء تشغيله، قم بالانتقال إلى موجه اوامر MySQL الخاص بك.

$ sudo mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.26-0ubuntu0.21.04.3 (Ubuntu)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

اذا لم يطلب منك ادخال كلمة السر اثناء التثبيت, اذا لا توجد كلمة سر, فقط اترك المكان فارغ و اضغط ادخال.

 

إنشاء قاعدة بيانات باسم almatten

سوف نقوم بانشاء قاعدة بيانات باسم almatten كالتالي:

mysql> create database almatten;
Query OK, 1 row affected (0.07 sec)

كما نلاحض ان كل امر نرسله يعيد لنا اعلام بنجاح الامر.

يمكننا تفقد ان القاعدة قد تمّ انشائها بالأمر التالي:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| almatten           |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

كما نلاحض في الاعلى ان القاعدة تم انشائها.

 

تحديد قاعدة البيانات

هناك العديد من قواعد البيانات, سوف نحدد قاعدة البيانات التي نريد العمل بها:

mysql> use almatten;
Database changed

 

إنشاء جداول (Tables) في MySQL

سوف نقوم بانشاء جدول عمال حيث كل عامل لديه الاسم, الـ ID, الحساب البريدي.

mysql> CREATE TABLE employee (
    -> id INT(3),
    -> name VARCHAR(20),
    -> email VARCHAR(20)
    -> );
Query OK, 0 rows affected, 1 warning (0.15 sec)

كما نلاحض ان المر قد نجح بدون اخطاء بالرسالة Query OK.
يمكننا رؤية الجدول بالأمر التالي:

mysql> show tables;
+--------------------+
| Tables_in_almatten |
+--------------------+
| employee           |
+--------------------+
1 row in set (0.00 sec)

يمكنك عرض الأعمدة التي قمت بإنشائها في الجدول:

mysql> SHOW columns FROM employee;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| email | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

INT: يعني رقم صحيح (integer)

VARCHAR: هو حرف ذو طول متغير كما هو محدد بـ 20 في المثال السابق.

 

إضافة عمود في MySQL

في بعض الحالات ربما نحتاج الى زيادة عمود الى الجدول الذي تم انشائه سابقا, مثلا سوف نزيد عمود لاسم العائلة (family_name):

mysql> ALTER TABLE employee
    -> ADD family_name VARCHAR(20) AFTER name;
Query OK, 0 rows affected (0.64 sec)
Records: 0  Duplicates: 0  Warnings: 0

الان سوف نقوم بالتأكد و ذلك بعرض الاعمدة في جدول العمال:

mysql> SHOW columns FROM employee;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| id          | int         | YES  |     | NULL    |       |
| name        | varchar(20) | YES  |     | NULL    |       |
| family_name | varchar(20) | YES  |     | NULL    |       |
| email       | varchar(20) | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

نلاحض انّ العمود "family_name" تم اضافته للجدول.

لنقم بزيادة عمود اخر للبلد (country):

mysql> ALTER TABLE employee
    -> ADD country VARCHAR(15) AFTER email;
Query OK, 0 rows affected (5.78 sec)
Records: 0  Duplicates: 0  Warnings: 0

للتأكد مرة اخرى:

mysql> SHOW columns FROM employee;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| id          | int         | YES  |     | NULL    |       |
| name        | varchar(20) | YES  |     | NULL    |       |
| family_name | varchar(20) | YES  |     | NULL    |       |
| email       | varchar(20) | YES  |     | NULL    |       |
| country     | varchar(15) | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

لقد تم زيادة عمود البلد (country).

 

أدخال القيم

الان سوف نقوم بادخال القيم للحقول السابقة في جدولنا الذي يتمثل في العمال:

mysql> INSERT IGNORE INTO employee(id, name, family_name, email, country)
    -> VALUE(1, 'Muhammad', 'Ali', 'Muhammad@email.com', 'US');
Query OK, 1 row affected (0.08 sec)

اذا أردنا ادخال المعلومات لكل الحقول كما في السابق, يمكننا التغاضي عن اضافة اسماء الحقول يكفي فقط القيم, هكذا:

mysql> INSERT IGNORE INTO employee
    -> VALUE(1, 'Muhammad', 'Ali', 'Muhammad@email.com', 'US');

لنتأكد من ان المعلومات ادخلت بدون خطأ, نقوم بالتالي:

mysql> SELECT * FROM employee;
+------+----------+-------------+--------------------+---------+
| id   | name     | family_name | email              | country |
+------+----------+-------------+--------------------+---------+
|    1 | Muhammad | Ali         | Muhammad@email.com | US      |
+------+----------+-------------+--------------------+---------+
1 row in set (0.00 sec)

النجمة * (asterisk) تعني كل الحقول (id, name, family_name...).

اذا اردنا اضهار الاسم و الحساب البريدي فقط نقوم بالتالي:

mysql> SELECT name, email FROM employee;
+----------+--------------------+
| name     | email              |
+----------+--------------------+
| Muhammad | Muhammad@email.com |
+----------+--------------------+
1 row in set (0.00 sec)

 

حذف القيم

لدينا القيم التالية في جدولنا:

mysql> SELECT * FROM employee;
+------+----------+-------------+--------------------+--------------+
| id   | name     | family_name | email              | country      |
+------+----------+-------------+--------------------+--------------+
|    1 | Muhammad | Ali         | Muhammad@email.com | US           |
|    2 | Naruto   | Uzumaki     | N@uzumaki.com      | Konohagakure |
|    3 | Sasuke   | Uchiha      | s@Uchiha.com       | Konohagakure |
|    4 | Kakashi  | Hatake      | K@Hatake.com       | Konohagakure |
|    5 | Minato   | Namikaze    | M@Namikaze.com     | Konohagakure |
|    6 | Neji     | Hyūga       | N@Hyūga.com        | Konohagakure |
+------+----------+-------------+--------------------+--------------+
6 rows in set (0.00 sec)

لنقل انّ السجل السادس لم نعد يحاجته لاي سبب كان, و لذلك سوف نقوم بحذفه:

mysql> DELETE FROM employee WHERE id = 6;
Query OK, 1 row affected (0.10 sec)

لنرى الجدول الان:

mysql> SELECT * FROM employee;
+------+----------+-------------+--------------------+--------------+
| id   | name     | family_name | email              | country      |
+------+----------+-------------+--------------------+--------------+
|    1 | Muhammad | Ali         | Muhammad@email.com | US           |
|    2 | Naruto   | Uzumaki     | N@uzumaki.com      | Konohagakure |
|    3 | Sasuke   | Uchiha      | s@Uchiha.com       | Konohagakure |
|    4 | Kakashi  | Hatake      | K@Hatake.com       | Konohagakure |
|    5 | Minato   | Namikaze    | M@Namikaze.com     | Konohagakure |
+------+----------+-------------+--------------------+--------------+
5 rows in set (0.00 sec)

كما نلاحض تم حذف القيمة السادسة من الجدول.

 

تحديث القيم

في حالة تغير لمعطيات اي عامل من العمال, يجيب القيام بتحديث ذلك داخل قاعدة البيانات في الجدول. في المثال الاتي سوف نقوم بتغيير الحساب البريدي لمحمد علي (Muhammad Ali):

mysql> UPDATE employee SET email = 'M_ALi@clay.com' WHERE id = 1;
Query OK, 1 row affected (0.17 sec)
Rows matched: 1  Changed: 1  Warnings: 0

نلاحض ان الحساب البريدي قد تم تحديثه:

mysql> SELECT * FROM employee;
+------+----------+-------------+-----------------+--------------+
| id   | name     | family_name | email           | country      |
+------+----------+-------------+-----------------+--------------+
|    1 | Muhammad | Ali         | M_ALi@clay.com  | US           |
|    2 | Naruto   | Uzumaki     | N@uzumaki.com   | Konohagakure |
|    3 | Sasuke   | Uchiha      | s@Uchiha.com    | Konohagakure |
|    4 | Kakashi  | Hatake      | K@Hatake.com    | Konohagakure |
|    5 | Minato   | Namikaze    | M@Namikaze .com | Konohagakure |
+------+----------+-------------+-----------------+--------------+
5 rows in set (0.00 sec)

يمكننا تغيير حقل ما بعدة شروط.

mysql> UPDATE employee SET country = 'Konoha'
    -> WHERE name = 'Naruto' AND family_name = 'Uzumaki';
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

 

حذف عمود في MySQL

اذا وجدنا انّ عمود ما في جدولنا لم نعد في حاجة اليه, يمكننا حذفه. في هذا المثال لنقل اننا نريد ان نحذف البلد (country).

mysql> ALTER TABLE employee DROP country;
Query OK, 0 rows affected (1.81 sec)
Records: 0  Duplicates: 0  Warnings: 0

لنتأكد ان العمود قد حذف:

mysql> SELECT * FROM employee;
+------+----------+-------------+-----------------+
| id   | name     | family_name | email           |
+------+----------+-------------+-----------------+
|    1 | Muhammad | Ali         | M_ALi@clay.com  |
|    2 | Naruto   | Uzumaki     | N@uzumaki.com   |
|    3 | Sasuke   | Uchiha      | s@Uchiha.com    |
|    4 | Kakashi  | Hatake      | K@Hatake.com    |
|    5 | Minato   | Namikaze    | M@Namikaze .com |
+------+----------+-------------+-----------------+
5 rows in set (0.00 sec)

 

إعادة تسمية جدول في MySQL

اذا وجدنا اننا اسمينا الجدول باسم ليس ذو صلة, يمكننا تغيره, في مثالنا سوف نقوم بتغيير الاسم الى shinobi_table.

mysql> RENAME TABLE employee TO shinobi_table;
Query OK, 0 rows affected (0.12 sec)

 

عرض قائمة بجميع الجداول

سوف نقوم بعرض جميع جداول قاعدة البيانات almatten:

mysql> show tables;
+--------------------+
| Tables_in_almatten |
+--------------------+
| shinobi_table      |
+--------------------+
1 row in set (0.00 sec)

 

يمكننا الان أخذ نسخة احتياطية من قاعدة بيانات MySQL أعلاه, و ذلك بامر واحد بسيط.

اولا اخرج من موجه اوامر MySQL الى موجه الاوامر النظام (لينكس في مثالنا هذا) و ذلك بالمر quit.

mysql> quit
Bye

~$ 

بعد ذلك نقوم بالامر التالي:

~$ sudo mysqldump -u root -p almatten > almatten.sql
Enter password:

~$ ls
'almatten reports'   Desktop     Downloads   Pictures   report.pdf   script.py   Videos
 almatten.sql        Documents   Music       Public     reports      Templates

كما نلاحض ان الملف almatten.sql تم انشائه. يجب عليك دائما ابقاء نسخة احتياطية لقاعدة بيانتك.

 

حذف قاعدة بيانات

سوف نقوم بحذف قاعدة البيانات و بعد ذلك سوف نستعمل النسخة الاحتياطية لاسترجاع ما حذفناه.

mysql> DROP DATABASE almatten;
Query OK, 1 row affected (0.22 sec)

نتأكد من حذف قاعدة البيانات:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

 

استعادة قاعدة البيانات

بعد عملية الحذف, لنقم باسترجاعها و ذلك بالنسخة الاحتياطية:

نقوم بالخرج من موجه الاوامر لـ MySQL الى موجه الاوامر للنظام كالسابق, ثم نقوم بالامر التالي:

:~$ sudo mysql -u root -p almatten < almatten.sql
Enter password:
ERROR 1049 (42000): Unknown database 'almatten'

لا تقلق, فلخطأ يضهر و يعلمنا ان قاعدة البيانات almatten غير معروفة, لذلك سوف نقوم بانشائها:

mysql> CREATE DATABASE almatten;
Query OK, 1 row affected (0.12 sec)

الان لنحاول مجددا:

~$ sudo mysql -u root -p almatten < almatten.sql
Enter password:

~$

لنتأكد من الأمر:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| almatten           |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

لنتأكد من الجداول ايضا:

mysql> SHOW TABLES FROM almatten;
+--------------------+
| Tables_in_almatten |
+--------------------+
| shinobi_table      |
+--------------------+
1 row in set (0.00 sec)

لنتأكد من محتوى الجدول ايضاََ:

mysql> SELECT * FROM shinobi_table;
+------+---------+-------------+-----------------+
| id   | name    | family_name | email           |
+------+---------+-------------+-----------------+
|    2 | Naruto  | Uzumaki     | N@uzumaki.com   |
|    3 | Sasuke  | Uchiha      | s@Uchiha.com    |
|    4 | Kakashi | Hatake      | K@Hatake.com    |
|    5 | Minato  | Namikaze    | M@Namikaze .com |
+------+---------+-------------+-----------------+
4 rows in set (0.00 sec)

كما نلاحض, كل المعلومات تم استرجاعها.

 

بعض أهم أوامر SQL

  • SELECT : يستخرج البيانات من قاعدة البيانات
  • UPDATE : يقوم بتحديث البيانات في قاعدة البيانات
  • DELETE : يحذف البيانات من قاعدة البيانات
  • INSERT IGNORE INTO : يدخل بيانات جديدة في قاعدة بيانات
  • CREATE DATABASE : ينشئ قاعدة بيانات جديدة
  • ALTER DATABASE : يعدل قاعدة بيانات
  • CREATE TABLE : يقوم بإنشاء جدول جديد
  • ALTER TABLE: يعدل الجدول
  • DROP TABLE : يحذف الجدول
  • CREATE INDEX : يقوم بإنشاء فهرس (مفتاح البحث / search key)
  • DROP INDEX : يحذف فهرس

 

هذا ليس كل شيئ, كل ما رأيناه كانت اشياء بسيطة, في المستقبل ان شاء الله سوف نتطرق الى انشاء عدة جداول و ايضا نشرح الـ primary key, foreign key باذن الله.

شكرا لك, و نتمنى ان يكون ما عرضناه مفيدا.

اترك لنا تعليق اذا كان لديك اي استفسار او شيئ اخر.

تذكر أن المساهمات في هذا الموضوع يجب أن تتبع إرشادات المجتمع.


التعليقات:

    لا توجد تعليقات بعد.