پیاچپی/بانک اطلاعاتی
مقدمه | نحوه توسعه پیاچپی | ساختار اولیه | انواع داده | متغیرها | ثابتها |
بانک اطلاعاتی | کار با پایگاه داده | جلسهها | کار با فرمها | توابع | کار با تاریخ و زمان |
mysql چیست؟
[ویرایش]هدف از ایجاد MySQL
[ویرایش]نسخههای اولیه MySQL را به هیچ عنوان نمیتوان با نسخههای جدید آن مقایسه نمود. نسخههای قدیمی بهدلیل ماهیت عمومی سیستمعاملی که برای آن درنظر گرفته شده بودند (یعنی یونیکس و لینوکسهای اولیه) دارای واسط کاربر چندان جالبی نبودند و تمام فرامین مربوط به طراحی و مدیریت بانک اطلاعاتی در آنها از طریق دستورات خط فرمان انجام میگرفت. اما بهتدریج و با پیدایش محیطهای گرافیکی توانمند و زیبا برای لینوکس، MySQL نیز همانند سایر نرمافزارهای اُپنسورس تحت لینوکس مراحل تکامل و بهینه شدن هسته و ابزارهای جانبی خود را پیمود تا به جایی رسید که اکنون به عنوان یکی از سریعترین، کاراترین و مقرون به صرفهترین برنامههای بانک اطلاعاتی جهان شناخته میشود.
غیر از توانمندیهای مربوط به واسط کاربر و امکانات جانبی، در نسخههای جدید MySQL سعی شدهاست نقاط ضعف همیشگی این موتور بانک اطلاعاتی، یعنی نبود سه عنصر مهمِ دید (View)، روالهای ذخیره شده و تریگرها، تا حدود زیادی رفع شود و اکنون دیگر MySQL به دلیل نداشتن این سه عنصر مهم، در رقابت با سایر بانکهای اطلاعاتی مورد سرزنش و بیمهری برنامهنویسان و مدیران بانکهای اطلاعاتی قرار نمیگیرد.
بهطورکلی وقتی به تاریخچه و مراحل تکامل MySQL مینگریم، سه ویژگی آن، یعنی قابلیت اطمینان، کارایی مناسب و آسانی استفاده را از نکات مورد توجه سازندگان آن در تولید این اثر مییابیم. قابلیت اطمینان، از این جهت که یک بانک اطلاعاتی اپنسورس و با حمایت یک شبکه توانمند و در همهجا حاضری به نام MySQL Network در هرلحظه آماده ارائه خدمت به استفاده کنندگان آن و پشتیبانی از آنها است و به راحتی میتواند دربسیاری از کاربردهای تجاری جایگزینی مناسب برای همتایان گرانقیمت خود باشد.
کارایی مناسب، از این لحاظ که با ارائه نسخههای متعدد تحت سیستم عاملهای مختلف و تحت معماریهای سخت افزاری گوناگون قادر است تا هم در کاربردهای مبتنی برتعداد فرایندهای فراوان (OLTP) و هم در کاربردهای دارای پردازشها و محاسبات سنگین (OLAP) مورد استفاده قرار گیرد. آسانیِ استفاده هم از اینجهت است که کلیه مراحل استفاده از آن، از دستیابی به فایلهای مخصوص نصب که بهطور رایگان قابل دریافت است و هم از این بابت که مراحل نصب و پیکربندی که حداکثر در ده دقیقه در سیستمعاملهای مختلف صورت میگیرد. همچنین در زمان بهرهبرداری به شیوهای بسیار آسان و گویا، ابزارهای خود را در اختیار توسعهدهندگان و مدیران سیستم قرار میدهد.
معماری MySQL
[ویرایش]ویژگی اپنسورس بودن MySQL باعث شده است معماری داخلی آن، بهصورت گویا و واضح و در قالب ماجولهای اساسی یا جانبی آن برای کاربرانش شناخته شده باشد. شکل ۱ بهطور خلاصه ماجولهای مختلف موجود درMySQL را با نامگذاری براساس وظایفشان، نشان میدهد.
همانطور که مشاهده میکنید ساختار این بانک اطلاعاتی شامل ماجولهای مختلفی برای انجامدادن وظایف مختلف و استاندارد یک موتور پایگاه دادهای همه منظوره است. برخی از قسمتهای اصلی و شیوه عملکرد آنها در MySQL عبارتند از:
مدیریت اتصال
[ویرایش]کنترل و ایجاد محدودیت درتعداد اتصالات قابل انجام بین کلاینتها و سرور بانک اطلاعاتی یکی از ماجولها و وظایف اصلی MySQL است. درواقع موتور بانک اطلاعاتی با مدیریت خودکار و ایجاد اشتراک بین کلاینتها در استفاده بهینه از اتصالات موجود نقش مهمی را ایفا میکند. درواقع این ماجول سعی میکند با ایجاد فضای مشترک، از به وجود آمدن تعداد زیادی اتصالات بیکار و بلااستفاده به بانک اطلاعاتی جلوگیری کند و در استفاده کمتر از فضای حافظه و پردازش پردازنده موثر واقع شود.
دستورات و عناصر اصلی
[ویرایش]وظایف ماجولهای مستقر در این قسمت، ایجاد امکان ساخت جداول بانک اطلاعاتی ایندکسها، دیدها، روالهای ذخیره شده، توابع، تریگرها، و پشتیبانی از دستورات SQL ویژه ساخت این عناصر یا خواندن، درج، حذف و تغییر دادهها در آنان است.
مدیریت حافظه
[ویرایش]یکی از مهمترین کارهایی که یک موتور پایگاه دادهای باید انجام دهد، تخصیص و مدیریت حافظه مورد استفاده بانک اطلاعاتی و پردازشهای مربوط به آنها و همچنین فضای موردنیاز جهت عملیات بافرینگ ورودی و خروجی بهعلاوه عملیات caching برای افزایش سرعت خواندن اطلاعات است. این کار بهخوبی در MySQL انجام میگیرد. ضمن اینکه در زمان ایجاد و نگهداری یک بانکاطلاعاتی نیز پارامترهای مختلفی در این زمینه توسط مدیرسیستم و استفاده از ابزارهای مختص MySQL قابل تنظیم است.
موتور ذخیرهسازی اطلاعات
[ویرایش]MySQL دارای ابزارهای متعددی برای ذخیرهسازی اطلاعات به شیوههای گوناگون است. برایناساس و درزمان ایجاد یک پایگاه داده، MySQL پرسشهای خاصی درمورد انتخاب نوع کاربرد بانک اطلاعاتی و انتخاب موتور ذخیرهسازی مطرح میگردد.
در پرسش اول که اختصاص به نوع کاربرد دارد، مدیرسیستم میتواند از بین دو نوع پیش فرض یعنی یک پایگاه داده با تعداد زیادی فرایندهای همزمان (OLTP) یا یک پایگاه داده با تعداد زیادی دستورات ویژه خواندن و آنالیز اطلاعات (OLAP) یکی را انتخاب کند یا اقدام به تنظیم دستی نماید.
با این کار و طبق انتخاب وی، سیستم، تعداد اتصالات همزمان پایگاه دادهای را که در بحث <مدیریت اتصال> به آن اشاره کردیم تنظیم میکند. براین اساس اولویت به کاربرد OLPA داده میشود چون اصولاً کاربرد OLTP نیاز به استفاده زمانی کمتری از یک اتصال دارد و بدین سبب میتواند تعداد اتصال همزمان بیشتری را مدیریت نماید.
اما درمورد سؤال دوم همانطور که گفتیم، MySQL امکان انتخاب نوع ابزار و موتور ذخیرهسازی را به مدیرسیستم میدهد. به عنوان مثال موتور InnoDB بهطور پیشفرض برای کاربردهای OLTP و موتوری به نام MyISAM برای کاربردهای OLAP و نگهداری انبوه اطلاعات پرحجم مثل Data Warhousing یا وب سایتها مورد استفاده MySQL قرار میگیرد. در ضمن همانطور که در شکل ۱ نیز مشاهده میکنید، MySQL نیز همانند سایر بانکهای اطلاعاتی مشهور، علاوه بر دو موتور مختص به خودش که برشمردیم، راهحلهایی برای ذخیرهسازی اطلاعات بهصورت آرشیو (Archive)، تجمعی (Federated Servers)، توزیع شده یا خوشهای (Cluster) یا حتی بانکهای اطلاعاتی سریع حافظهای (In Memory) و چند نوع دیگر را دارد.
ویژگیهای برتر
[ویرایش]در MySQL معمولاً اکثر روشهای ساخت و بهرهبرداری از یک بانکاطلاعاتی به دو کاربرد OLTP و OLAP ختم میشود که موتور بانک اطلاعاتی برای پشتیبانی و کارایی بهینه از هردو کاربرد مذکور، به خوبی ساخته و پرداخته شده است. به عنوان نمونه، در کاربردهای OLTP، وجود سازوکارها و استانداردهای یک بانک اطلاعاتی برای تضمین صحت اطلاعات مثل پشتیبانی کامل از انواع فرایندها (Transaction) و حتی فرایندهای توزیع شده، روابط اطلاعاتی (کلید اولیه، کلیدهای خارجی) و وجود ایندکسهای منحصر بهفرد (UNIQE INDEX) را میتوان گواهی براین مسئله دانست. ضمن اینکه موتور ذخیرهسازی InnODB نیز به نوبه خود با مدیریت فضا و صفحات حاوی اطلاعات (Pages)درحال ایجاد نظم و ترتیب در اطلاعات و حذف فضاهای خالی برای افزایش سرعت جستجو است.
این موتور ذخیرهسازی همچنین قادر است با یک تصویر حایل از اطلاعات چندین جدول یک بانک اطلاعاتی، از تداخل عملیات خواندن با فرایندها (تغییر، درج، حذف) و بروز مشکلات مربوط به قفل شدن رکوردها (Blocking) جلوگیری نماید. اما درمورد کاربردهای OLAP، موتور MyISAM با فراهم نمودن یک فضای اطلاعاتی ترابایتی، محیط بسیار وسیعی را برای انباشت اطلاعات و دسترسی سریع به آنها در مواقع موردنظر را پدید آورده است.
تجربه نشان داده است که بسیاری از شرکتهای معتبر و سایتهای اینترنتی مشهور که با مشکل ذخیرهسازی و آنالیز انبوه اطلاعات مواجه بودهاند و سعی داشتند با استفاده از روشهای توسعه طولی (Scale UP) مثل استفاده از سرورهایی با حافظه و هارددیسکهای پرظرفیتتر و سریعتر یا پردازندههای قدرتمندتر، ظرفیت سیستم خود را بالا ببرند، موفق شدند با روی آوردن به MySQL و استفاده از موتور ذخیرهسازی MyISAM به نوعی دست به توسعه عرضی (Scale Out) بسیار مقرون به صرفهای بزنند و تا هشتاددرصد هزینههای مربوط به توسعه طولی یا همان ارتقای سختافزاری را کاهش دهند.
ابزارهای مدیریتی
[ویرایش]اپنسورس بودن MySQL باعث شدهاست بسیاری از شرکتها بتوانند برای هرچه آسانتر کردن و پیشرفتهتر نمودن ابزارها و محیطهای گرافیکی مبتنی بر MySQL وارد کار شوند و به سرعت کمبود واسط کاربرهای ویژه مدیریت درMySQL را جبران نمایند. یکی از معتبرترین واسطهای کاربرهای گرافیکی در زمینه مدیریت، برنامه Query Browser است که شرکتMySQL آنرا ساخته و رسمیترین برنامه مدیریت در MySQL است.
این برنامه نیز به صورت رایگان از سایت MySQL.Com قابل دانلود و نصب است. با استفاده از این برنامه قادر خواهید بود جداول، دیدها، توابع و هرچه که در یک بانک اطلاعاتی با دستورات SQL باید ساخته شود را طراحی و پیادهسازی نمایید. درهمین رده از برنامهها میتوان به ابزارهای دیگری چون ویزارد پیکربندی (Configuration Wizard) و یا ویزارد مخصوص ارتقا یا مهاجرت به MySQL یعنی Migration Wizard و بسیاری برنامههای دیگر برای برپایی سرورهای MySQL، عملیات بکآپگیری، کلاسترینگ و امثال آن، نیز اشاره نمود.
شایان ذکر است که برخی از سایر توزیعکنندگان MySQL نیز ابزارهای مدیریتی خاص خود را تهیه و ارائه نمودهاند که مشهورترین آنها محصول شرکت اروپایی SAP موسوم به MAXDB است که نسخهای براساس MySQL میباشد و ابزارهای مدیریتی متنوعی مثل DBManager یا SQL Studio را به همراه خود دارد. در شمارههای آینده سعی میکنیم به محیط MySQL و ابزارهای کار با آن، بیشتر بپردازیم.
ارتباط با بانک اطلاعاتی mysql در php
[ویرایش]قبل از اینکه بخواهید به اطلاعات موجود در بانک اطلاعاتی دسترسی پیدا کنید اول باید یک ارتباط با بانک اطلاعاتی برقرار کنید و به وسیله آن ارتباط اطلاعات را ارسال و دریافت نمایید ، ارتباط با بانک اطلاعاتی به شکل زیر است :
mysqli_connect(host,username,password,dbname);
مولفهها
[ویرایش]Host:
این گزینه برای شناسایی سرور می باشد و در اکثر مواقع localhost می باشد
Username:
نام کاربری بانک اطلاعاتی می باشد که شما باید از قبل باید آن را داشته باشید
Password:
این گزینه هم رمز عبور بانک اطلاعاتی می باشد، رمز عبور را هم از قبل باید داشته باشید
DbName:
اسم بانک اطلاعاتی، زمان ایجاد شما یک اسم انتخاب میکنید
مثال:
<?php
// Create connection
$con=mysqli_connect("localhost","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>
در کدهای بالا شما یک بانک اطلاعاتی با مشخصات زیر ایجاد میکنید:
Host: localhost
User:peter
Password:abc123
Db name: my_db
در خط زیر شما بررسی میکنید که آیا ارتباط برقرار شده یا نه ، و اگر مشکلی بود اعلام نماید:
if (mysqli_connect_errno($con))
خط زیر هم پیغام خطا را نمایش میدهد
echo "Failed to connect to MySQL: " . mysqli_connect_error();
mysql_error()
این تابع خطای برگشتی را مشخص میکند و به شما کمک میکند که مشکل را زودتر پیدا کنید
mysqli_connect_error()
قطع اتصال به بانک اطلاعاتی
در صورتی که شما بعد از اتصال و انجام کاراها اتصال را قطع ننمایید باعث می شود که سرور شلوغ شود و در مواردی باعث قفل کردن آن می شود
تابع
mysqli_close($con);
به شما کمک میکند بار سرور را کم کنید
mysqli_close($con);
ایجاد بانک اطلاعاتی در mysql
[ویرایش]ایجاد بانک اطلاعاتی
[ویرایش]برای ایجاد یک بانک اطلاعاتی از دستور CREATE DATABASE استفاده میکنیم ( در اینجا با استفاده از کد php اموزش داده خواهد شد)
دستورات را به شکل زیر قرار میدهیم :
<?php
$con=mysqli_connect("example.com","peter","abc123");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// Create database
$sql="CREATE DATABASE my_db";
if (mysqli_query($con,$sql))
{
echo "Database my_db created successfully";
}
else
{
echo "Error creating database: " . mysqli_error($con);
}
?>
در این تکه کد متغیر sql اطلاعات برای ایجاد یک بانک اطلاعات را به سرور میدهد
توسط IF چک میکنیم که اگربانک اطلاعاتی ایجاد شد پیغام موفقیت بدهد در غیر اینصورت پیغام خطا بدهد
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// Create table
$sql="CREATE TABLE persons(FirstName CHAR(30),LastName CHAR(30),Age INT)";
// Execute query
if (mysqli_query($con,$sql))
{
echo "Table persons created successfully";
}
else
{
echo "Error creating table: " . mysqli_error($con);
}
?>