منبع اصلی نوشتار زیر در این لینک قرار دارد

ایجاد جداول در MySQL

 یکی از اصلی ترین اشیا پایگاه داده ها، جداول هستند که اطلاعات را در خود ذخیره می کنند. جداول از ستون ها و سطرها تشکیل شده اند. هر جدول پایگاه داده در مورد یک موجودیت از محیط است و هر سطر نمونه ای از آن موجودیت را بیان می کند. یک محیط می تواند بیمارستان، مدرسه، فروشگاه اینترنتی و غیره باشد. شناخت مناسب و کامل محیط، باعث می شود تا جداول و ستون های (خصیصه ها یا Attributes) آن به درستی طراحی شوند.

در پایگاه داده MySQL پس از آنکه پایگاه داده یا اسکیمایی را ایجاد کردیم، می توانیم درون آن جدول ها را ایجاد کنیم. بنابراین نخستین گام ایجاد پایگاه داده و انتخاب آن پایگاه داده به عنوان پایگاه داده پیشفرض توسط دستورهای زیر است :

;CREATE DATABASE db_name

;USE db_name

برای ایجاد ایجاد جداول کاربر باید دارای مجوز CREATE باشد. پس کاربری را به طور مثال به نام user1 ایجاد می کنیم که دارای مجوز CREATE است. همچنین که از قبل (و توسط کاربر root) یک پایگاه داده به نام restaurant ایجاد شده است. توسط دستور GRANT در زیر به کاربر user1 مجوز ایجاد جداول را می دهیم.

;’CREATE USER ‘user1’@’localhost’ IDENTIFIED BY ‘user1pass

;’GRANT create on restaurant.* TO ‘user1’@’localhost

 mysql_create_table1

با استفاده از دستور زیر با کاربر user1 به MySQL لاگین کنید.

mysql -u user1 -p

پس از لاگین باید یک پایگاه داده را انتخاب کنیم (USE db_name). کاربر user1 طبق دستورهای بالا کاربر تنها می تواند درون پایگاه داده restaurant جدول ایجاد کند و اگر به صور مثال پایگاه داده mysql را با دستور USE mysql انتخاب کند خطای زیر نشان داده می شود.

‘ERROR 1044 (42000): Access denied for user ‘user1’@’localhost’ to database ‘mysql

بنابراین لازم است دستور زیر اجرا شود :

;USE restaurant

تعریف یک جدول ساده

ساده ترین شکل ایجاد جدول در پایگاه داده MySQL به صورت شکل زیر است. نام جدول در میان پایگاه داده های مختلف منحصر به فرد نیست و می شود که نام و ساختار آنها کاملا مشابه و به عبارتی تکراری باشند.


mysql_create_table3

هر جدول دارای یک نام و چندین ستون است. ستون ها دارای نام منحصر به فرد درون جدول هستند و هر کدام دارای یک تعریف می باشند که عبارتند از :

  • یک ستون دارای یک نوع داده ای مانند عدد صحصح (یا INT)، رشته متغیر (یا VARCHAR)، رشته با طول ثابت (یا CHAR)، تاریخ و زمان (یا DATE) است.
  • یک ستون می تواند NULL باشد. مقدار NULL عدد صفر نیست بلکه به معنی خالی بودن آن فیلد از سطر جدول است. همچنین اگر بخواهیم حتما ستون مقدار داشته باشد باید از NOT NULL استفاده کنیم.
  • یک ستون می تواند دارای مقدار پیشفزض یا DEFAULT باشد به این معنی که اگر مقداردهی نشد، آنگاه با یک مقدار پیشفرض آن ستون را مقداردهی کنیم.
  • یک ستون می تواند کلید اصلی یا PRIMARY KEY باشد. کلید اصلی، ستونی است منحصر به فرد به این معنی که نمی تواند مقدار تکراری داشته باشد. همچنین مقدار ستون کلید اصلی نمی تواند NULL باشد و به عبارتی ستون کلید اصلی می بایست حتما NOT NULL باشد. همچنین هر جدول دارای یک کلید اصلی است ولی خود کلید اصلی می تواند ترکیبی از چندین کلید باشد.
  • یک ستون می تواند کلید خارجی یا FOREIGN KEY باشد. کلید خارجی در جدولی دیگر به عنوان کلید اصلی است. به عبارتی برای پیوند (Join) دادن و ارتباط دادن دو یا جند جدول با یکدیگر از کلید خارجی استفاده می شود. یک جدول می تواند یک یا چند کلید خارجی (مربوط به یک یا چند جدول دیگر) داشته باشد.

شکل زیر یک نمونه ساده از یک جدول را نشان می دهد. در پایان تعریف جدول و پیش از سمی کالن (;) می توایند نوع Storage Engine آن جدول (که در مثال زیر InnoDB) است و Character Set پیشفرض آن جدول مشخص شده است. شما می توانید در زمان ایجاد پایگاه داده نیز Character set را نیز مشخص کنید.

mysql_create_table4

هر تعریف ستون با یک کالن (,) از تعریف دیگر جدا می شود. همچنین در شکل زیر در محیط MySQL Workbench نیز می توانید خصوصیات جدول را مشاهده کنید.

mysql_create_table5

 در تعریف جدول شکل بالا، جدول department دارای سه ستون است. که ستون اول دارای نوع داده ای int و دو ستون دیگر دارای نوع داده ای varchar است. طول هر ستون نیز داخل ()تعیین شده است. ستون department_number به عنوان کلید اصلی تعیین شده است.

تعریف کلید اصلی و کلید خارجی

همانطور که گفته شد کلید اصلی یک ستون یا ترکیبی از چند ستون است که مقدار آن در تمامی فیلدها منحصر به فرد است و همچنین حتما باید دارای مقدار باشد یا به عبارتی NOT NULL است. معمولا (و نه همیشه) در ایجاد کردن جداول در پایگاه داده MySQL از عبارت AUTO_INCREMENT استفاده می شود به این معنی که مقدار فیلد از عدد ۱، یکی یکی افزایش پیدا می کند. به طور مثال در تعریف جدول department  از این عبارت استفاده نشده است و معنی آن این است که اعداد را باید وارد کنیم ولی برای هر سطر عددی منحصر به فرد.

در شکل مربوط به خروجی MySQL Workbench ستون AI مربوط به عبارت AUTO_INCREMENT است. ستون NN مربوط به NOT NULL و ستون PK مربوط به PRIMARY key است. خط زیر چگونگی تعیین یک یا چند ستون را به عنوان کلید اصلی نشان می دهد. (شکل تعریف جدول department را نیز مشاهده کنید)

(…,PRIMARY KEY(COLUMN1, COLUMN2

توجه داشته باشید که کلید اصلی یکی از Contraint های موجود در MySQL است که می توان از طریق قطعه کد زیر نیز آنرا تعیین کرد.

mysql_create_table6

در شکل بالا یک جدولی به نام contacts ایجاد شده است که چهار ستون دارد. یک CONSTRAINT به نام contacts_pk از نوع کلید اصلی ایجاد شده است. همچنین می توان شکل کلی تعریف آنرا به صورت کلی زیر نیز تعریف کرد.

(…,CONSTRAINT constraint_name PRMARY KEY(COLUMN1, COLUMN2

کلید خارجی ستوتی از یک جدول است که در جدولی دیگر به عنوان کلید اصلی است. از کلید خارجی برای ارتباط دادن دو جدول استفاده می شود. در شکل زیر دو جدول به نام customers و orders وجود دارد. ستون customerNumber به عنوان کلید اصلی جدول customers و ستون orderNumber به عنوان کلید اصلی جدول orders هستند. هر مشتری یک یا چند سفارش دارد و هر سفارش متعلق به یک مشتری است. بنابراین برای ارتباط دادان دو جدول، در جدول orders از کلید خارجی customerNumber استفاده شده است.

mysql_create_table7

جدول customers را جدول والد و جدول orders را جدول فرزند می نامند. فلید مربوط به کلید خارجی در سطرهای جدول فرزند حتما باید در فیلد کلید اصلی جدول والد وجود داشته باشد. همانطور که گفته شد در جدول های شکل بالا هر مشتری دارای چندین سفارش است و این ارتباط از طریق کلید خارجی برقرار می شود و آنرا ارتباط یک به چند یا one-to-many گفته می شود.

کلید خارجی یک Constraint است که ارتباط میان دو جدول را برقرار می کند.در واقع در جدول فرزند با ایجاد Constraint از نوع FOREIGN KEY است که یک ارجاع یا REFERENCES به جدول والد است.

mysql_create_table8

CONSTRAINT دارای یک نام است و پس از عبارت FOREIGN KEY یک نام برای کلید خارجی و ستون (هایی) از جدول تعیین می شود. پس از عبارت REFERENCES باید نام جدول والد و ستون (های) کلید خارجی آورده شود. همانطور که در شکل زیر می بینید، تعیین PRIMARY KEY در جلوی ستون مربوطه آورده شده است.

mysql_create_table9

مورد دیگر در مورد شکل تعریف جدول contacts، اینکه Storage Engine و Character set نیز مشخص نشده اند. در پایگاه داده MySQL موتور ذخیره سازی (یا Storage Engine) پیشفرض InnoDB است. همچنین در مطلب “ایجاد پایگاه داده در MySQL” گفته شد که می توان در زمان ایجاد پایگاه داده، Character set پیشفرض را تعریف کرد در صورتی که در زمان ایجاد جدول Character set مشخص نشود، آنگاه از  Character set پیشفزض پایگاه داده استفاده می شود. همچنین از دستور زیر (در سیستم عامل لینوکس و دیگر یونیکس ها) می توان برای پیدا کردن Storage Engine پیشفرض استفاده کرد.

mysqld –verbose –help | grep default-storage-engine


می توانید در مورد ON DELETE از اینجا مطالعه کنید.

می توانید در مورد CONSTRAINT ها از اینجا مطالعه کنید.

می توانید در مورد انواع داده ای از اینجا مطالعه کنید.



برچسب ها : , ,