فصل ۱: شروع درست — نصب، کلاینت‌ها و تنظیمات فارسی

دیتابیس رابطه‌ای و جایگاه MySQL

دیتابیس رابطه‌ای به زبان ساده

در یک دیتابیس رابطه‌ای، داده در جدولها نگه‌داری می‌شود: هر ردیف یک «چیز» است (یک مشتری، یک سفارش، یک تخته فرش) و هر ستون یک ویژگی آن. جدول‌ها با کلید به هم وصل می‌شوند؛ مثلاً ستون customer_id در جدول سفارش‌ها به کلید اصلی جدول مشتریان اشاره می‌کند. زبان کار با این داده‌ها SQL است؛ زبانی «اعلانی» که در آن می‌گویید چه می‌خواهید، نه چطور پیدایش کنید. پیدا کردن بهترین مسیر اجرا کار بهینه‌ساز (Optimizer) است.

ارزش واقعی یک سیستم مدیریت دیتابیس (RDBMS) فقط ذخیره‌ی داده نیست؛ این است که وقتی صد کاربر هم‌زمان سفارش ثبت می‌کنند، برق می‌رود یا دو نفر یک رکورد را هم‌زمان ویرایش می‌کنند، داده سالم بماند. در فصل ششم می‌بینیم MySQL این را با موتور InnoDB، تراکنش و قفل تضمین می‌کند.

چرا MySQL؟

  • پشت وردپرس، ووکامرس، Magento و بخش بزرگی از وب؛ تقریباً هر هاست اشتراکی ایرانی آن را دارد.
  • پشتیبانی کامل در جنگو، لاراول، Node.js و هر زبان دیگر.
  • Replication ساده و بالغ، ابزارهای بکاپ فراوان و جامعه‌ی بزرگ.
  • از نسخه‌ی 8.0 امکانات مدرن: CTE، Window Function، JSON، CHECK و ایندکس نامرئی.

کدام نسخه؟

نسخهوضعیتتوصیه
5.7پایان پشتیبانی (اکتبر 2023)فقط مهاجرت؛ هیچ پروژه‌ی جدیدی
8.0پایان پشتیبانی رسمی در آوریل 2026هنوز بسیار رایج؛ برنامه‌ی ارتقا به 8.4 داشته باشید
8.4 LTSنسخه‌ی پشتیبانی بلندمدتانتخاب پیش‌فرض برای تولید
9.x Innovationانتشار فصلی، عمر کوتاهبرای آزمایش امکانات جدید، نه سرور اصلی

MySQL، MariaDB یا PostgreSQL؟

موضوعMySQL 8.4MariaDB 11PostgreSQL
مالکOracleبنیاد MariaDB (انشعاب از MySQL)جامعه‌ی متن‌باز
JSONنوع دودویی واقعیمستعار LONGTEXT با بررسی اعتبارJSONB بسیار قوی
احراز هویت پیش‌فرضcaching_sha2_passwordmysql_native_password / ed25519SCRAM-SHA-256
GTIDقالب UUID:Nقالب domain-server-seq (ناسازگار)—
نقطه‌ی قوتسادگی، اکوسیستم وبامکانات اضافه، سازگاری با سیستم‌عامل‌هاSQL غنی، افزونه‌ها

MariaDB در ظاهر «همان MySQL» است و کلاینت و بیشتر SQL مشترک است، اما از نسخه‌ی 10 به بعد مسیرشان جدا شده؛ فایل بکاپ، Replication و بعضی collationها بین این دو لزوماً جابه‌جا نمی‌شوند. در این دوره هرجا تفاوت مهم باشد اشاره می‌کنیم.

-- نسخه‌ی سرور و موتور پیش‌فرض را همیشه اول بدانید
SELECT VERSION(), @@version_comment, @@default_storage_engine;

نکته‌هایی که کمتر کسی می‌داند

  • اگر خروجی VERSION() چیزی مثل 10.11.6-MariaDB بود، شما MySQL ندارید؛ بسیاری از هاست‌ها و توزیع‌ها بسته‌ی mysql را در واقع با MariaDB پر می‌کنند.
  • بکاپی که از MySQL 8 گرفته شده ممکن است در MariaDB با خطای Unknown collation: utf8mb4_0900_ai_ci بازیابی نشود؛ این collation در MariaDB (دست‌کم نسخه‌های قدیمی‌تر) وجود ندارد.
  • MyISAM هنوز در MySQL هست، اما تراکنش، کلید خارجی و بازیابی پس از خرابی ندارد. هر جدول MyISAM در پروژه‌ی قدیمی را به InnoDB تبدیل کنید.
  • شماره‌ی نسخه‌ی 8.0.x مهم است: امکاناتی مثل CHECK (8.0.16)، EXPLAIN ANALYZE (8.0.18) و INTERSECT (8.0.31) در میانه‌ی عمر 8.0 اضافه شده‌اند.
  • Query Cache معروف MySQL در 8.0 کاملاً حذف شده؛ راهنماهای قدیمی که query_cache_size را تنظیم می‌کنند باعث خطای شروع سرور می‌شوند.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.