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

إتقان عمليات قاعدة البيانات: الفهرس والعرض والنسخ الاحتياطي والاسترداد

تم النشر بتاريخ 2024-08-23
تصفح:282

مقدمة

Mastering Database Operations: Index, View, Backup, and Recovery

في هذا الدرس التطبيقي، سوف نتعلم ونتدرب على الفهرسة والعرض والنسخ الاحتياطي والاسترداد. تعتبر هذه المفاهيم بالغة الأهمية لمدير قاعدة البيانات.

هدف التعلم

  • إنشاء فهرس
  • إنشاء طريقة عرض
  • النسخ الاحتياطي والاسترداد

تحضير

قبل أن نبدأ، نحتاج إلى تهيئة البيئة.

ابدأ خدمة MySQL وقم بتسجيل الدخول كجذر.

cd ~/project
sudo service mysql start
mysql -u root

تحميل البيانات في الملف. تحتاج إلى إدخال الأمر في وحدة تحكم MySQL لإنشاء قاعدة البيانات:

source ~/project/init-database.txt

فِهرِس

الفهرس عبارة عن بنية مرتبطة بالجدول. دورها يعادل دليل الكتاب. يمكنك العثور بسرعة على المحتوى وفقًا لرقم الصفحة في الدليل.

عندما تريد الاستعلام عن جدول يحتوي على عدد كبير من السجلات، ولا يحتوي على فهرس، فسيتم سحب كافة السجلات لمطابقة شروط البحث واحدا تلو الآخر، وإرجاع السجلات المطابقة للشروط . إنها تستغرق وقتًا طويلاً للغاية وتؤدي إلى عدد كبير من عمليات الإدخال/الإخراج على القرص.

إذا كان هناك فهرس في الجدول، فيمكننا العثور بسرعة على البيانات الموجودة في الجدول حسب قيمة الفهرس، مما يؤدي إلى تسريع عملية الاستعلام بشكل كبير.

هناك طريقتان لإعداد فهرس لعمود معين:

ALTER TABLE table name ADD INDEX index name (column name);

CREATE INDEX index name ON table name (column name);

دعونا نستخدم هاتين العبارتين لإنشاء فهرس.

قم بإنشاء فهرس idx_id في عمود المعرف في جدول الموظفين:

ALTER TABLE employee ADD INDEX idx_id (id);

إنشاء فهرس idx_name في عمود الاسم في جدول الموظفين

CREATE INDEX idx_name ON employee (name);

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

SHOW INDEX FROM employee;
MariaDB [mysql_labex]> ALTER TABLE employee ADD INDEX idx_id (id);
Query OK, 0 rows affected (0.005 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [mysql_labex]> SHOW INDEX FROM employee;
 ---------- ------------ ---------- -------------- ------------- ----------- ------------- ---------- -------- ------ ------------ --------- --------------- --------- 
| Table    | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Ignored |
 ---------- ------------ ---------- -------------- ------------- ----------- ------------- ---------- -------- ------ ------------ --------- --------------- --------- 
| employee |          0 | PRIMARY  |            1 | id          | A         |           5 |     NULL | NULL   |      | BTREE      |         |               | NO      |
| employee |          0 | phone    |            1 | phone       | A         |           5 |     NULL | NULL   |      | BTREE      |         |               | NO      |
| employee |          1 | emp_fk   |            1 | in_dpt      | A         |           5 |     NULL | NULL   |      | BTREE      |         |               | NO      |
| employee |          1 | idx_id   |            1 | id          | A         |           5 |     NULL | NULL   |      | BTREE      |         |               | NO      |
| employee |          1 | idx_name |            1 | name        | A         |           5 |     NULL | NULL   | YES  | BTREE      |         |               | NO      |
 ---------- ------------ ---------- -------------- ------------- ----------- ------------- ---------- -------- ------ ------------ --------- --------------- --------- 
5 rows in set (0.000 sec)

عندما نستخدم عبارة SELECT للاستعلام، فإن شرط WHERE سيحكم تلقائيًا على ما إذا كان هناك فهرس.

منظر

العرض عبارة عن جدول افتراضي مشتق من جدول واحد أو أكثر. إنها بمثابة نافذة يمكن للأشخاص من خلالها عرض البيانات الخاصة التي يوفرها النظام حتى لا يضطروا إلى عرض البيانات بأكملها في قاعدة البيانات. يمكنهم التركيز على الأشخاص الذين يهتمون بهم.

كيفية تفسير "العرض عبارة عن جدول افتراضي"؟

  • يتم تخزين تعريف العرض فقط في قاعدة البيانات بينما يتم تخزين بياناته في الجدول الأصلي؛
  • عندما نستخدم طريقة العرض للاستعلام عن البيانات، ستقوم قاعدة البيانات باستخراج البيانات من الجدول الأصلي وفقًا لذلك.
  • نظرًا لأن البيانات الموجودة في العرض تعتمد على ما تم تخزينه في الجدول الأصلي، فبمجرد تغيير البيانات الموجودة في الجدول، فإن ما نراه في العرض سيتغير أيضًا.
  • معاملة العرض كجدول.

تنسيق كشف الحساب المستخدم لإنشاء العرض:

CREATE VIEW view name (column a, column b, column c) AS SELECT column 1, column 2, column 3 FROM table name;

من البيان، يمكننا أن نرى أن الجزء الأخير هو عبارة SELECT، مما يعني أن العرض يمكن أيضًا أن يكون مبنيًا على جداول متعددة. كل ما يتعين علينا فعله هو استخدام الاستعلامات الفرعية أو الانضمام إلى عبارة SELECT.

الآن لنقم بإنشاء عرض بسيط باسم v_emp والذي يتضمن ثلاثة أعمدة v_name، v_age، v_phone:

CREATE VIEW v_emp (v_name,v_age,v_phone) AS SELECT name,age,phone FROM employee;

ثم أدخل

SELECT * FROM v_emp;
MariaDB [mysql_labex]> CREATE VIEW v_emp (v_name,v_age,v_phone) AS SELECT name,age,phone FROM employee;
Query OK, 0 rows affected (0.003 sec)

MariaDB [mysql_labex]> SELECT * FROM v_emp;
 -------- ------- --------- 
| v_name | v_age | v_phone |
 -------- ------- --------- 
| Tom    |    26 |  119119 |
| Jack   |    24 |  120120 |
| Jobs   |  NULL |   19283 |
| Tony   |  NULL |  102938 |
| Rose   |    22 |  114114 |
 -------- ------- --------- 
5 rows in set (0.000 sec)

النسخ الاحتياطي

لأسباب أمنية، النسخ الاحتياطي مهم للغاية في إدارة قاعدة البيانات.

يقوم الملف الذي تم تصديره بحفظ البيانات في قاعدة البيانات فقط بينما يحفظ النسخ الاحتياطي بنية قاعدة البيانات بأكملها بما في ذلك البيانات والقيود والفهارس والعرض وما إلى ذلك في ملف جديد.

mysqldump هو برنامج عملي في MySQL للنسخ الاحتياطي. وينتج ملف نصي SQL يحتوي على كافة الأوامر الأساسية لإعادة إنشاء قاعدة بيانات من البداية، مثل CREATE وINSERT وما إلى ذلك.

بيان لاستخدام النسخ الاحتياطي mysqldump:

mysqldump -u root database name > backup file name;   #backup entire database

mysqldump -u root database name table name > backup file name;  #backup the entire table

حاول إجراء نسخ احتياطي لقاعدة البيانات بأكملها mysql_labex. اسم الملف إلى bak.sql. اضغط أولاً على Ctrl Z للخروج من وحدة تحكم MySQL، ثم افتح الوحدة الطرفية وأدخل الأمر:

cd ~/project/
mysqldump -u root mysql_labex > bak.sql;

استخدم الأمر "ls" وسنرى ملف النسخ الاحتياطي bak.sql;

cat bak.sql
-- MariaDB dump 10.19  Distrib 10.6.12-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost    Database: mysql_labex
-- ------------------------------------------------------
-- Server version       10.6.12-MariaDB-0ubuntu0.22.04.1

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE=' 00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

……

استعادة

في وقت سابق من هذا التمرين المعملي، تدربنا على استخدام ملف النسخ الاحتياطي لاستعادة قاعدة البيانات. استخدمنا أمرًا مشابهًا لهذا:

source ~/project/init-database.txt

يقوم هذا البيان باستعادة قاعدة بيانات mysql_labex من ملف import-database.txt.

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

mysql -u root
CREATE DATABASE test;
MariaDB [(none)]> CREATE DATABASE test;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> SHOW DATABASES;
 -------------------- 
| Database           |
 -------------------- 
| information_schema |
| mysql              |
| mysql_labex        |
| performance_schema |
| sys                |
| test               |
 -------------------- 
6 rows in set (0.000 sec)

Ctrl Z للخروج من MySQL. قم باستعادة bak.sql لاختبار قاعدة البيانات:

اختبار الجذر لـ mysql -u mysql -u root test يمكننا التأكد من نجاح عملية الاسترداد أم لا عن طريق إدخال أمر لعرض الجداول في قاعدة بيانات الاختبار:


جذر MySQL -u اختبار الاستخدام عرض الجداول
mysql -u root
USE test
SHOW TABLES
MariaDB [(لا شيء)]> اختبار الاستخدام؛ قراءة معلومات الجدول لاستكمال أسماء الجداول والأعمدة يمكنك إيقاف تشغيل هذه الميزة لبدء تشغيل أسرع باستخدام -A تم تغيير قاعدة البيانات MariaDB [اختبار]> إظهار الجداول؛ ---------------- | Tables_in_test | ---------------- | قسم | | موظف | | مشروع | | table_1 | ---------------- 4 صفوف في المجموعة (0.000 ثانية)
mysql -u root test يمكننا أن نرى أنه تم بالفعل استرداد الجداول الأربعة إلى قاعدة بيانات الاختبار.

ملخص

تهانينا! لقد أكملت الدرس التطبيقي حول العمليات الأساسية الأخرى في MySQL. لقد تعلمت كيفية إنشاء الفهارس وطرق العرض وكيفية النسخ الاحتياطي لقاعدة البيانات واستعادتها.


؟ التدريب الآن: العمليات الأساسية الأخرى


هل تريد معرفة المزيد؟

    ؟ تعرف على أحدث أشجار مهارات MySQL
  • ؟ اقرأ المزيد عن دروس MySQL
  • ؟ انضم إلى Discord أو قم بتغريدنا على @WeAreLabEx
بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/labex/mastering-database-operations-index-view-backup-and-recovery-26dp؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3