دستور ALTER در MySQL – راهنمای جامع


دستور ALTER در MySQL هنگامی که میخواهید نام یکی از جدولها یا یکی از فیلدهای جدولی را تغییر دهید، یا وقتی میخواهید یک ستون به جدول اضافه یا حذف کنید، دستوری کاملاً مفید محسوب میشود. در ادامه کار خود را با ایجاد یک جدول به نام testalter_tbl آغاز میکنیم:
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> create table testalter_tbl -> ( -> i INT, -> c CHAR(1) -> ); Query OK, 0 rows affected (0.05 sec) mysql> SHOW COLUMNS FROM testalter_tbl; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | i | int(11) | YES | | NULL | | | c | char(1) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
حذف، افزودن یا تغییر موقعیت یک ستون
اگر بخواهید یک ستون i موجود در جدول MySQL فوق را حذف کنید در این صوت باید از بند DROP همراه با دستور ALTER به صورت زیر استفاده کنید:
mysql> ALTER TABLE testalter_tbl DROP i;
بند DROP در صورتی که ستون تنها ستون جدول باشد، کار نخواهد کرد.
برای افزودن یک ستون باید از ADD و تعریف ستون استفاده کنید. عبارت زیر ستون i را به جدول testalter_tbl باز میگرداند:
mysql> ALTER TABLE testalter_tbl ADD i INT;
پس از ارسال این عبارت، جدول testalter شامل دو ستون خواهد بود که در هنگام ایجاد اولیه، در آن گنجانده شده بود؛ اما ساختار این جدولها به همان ترتیب نخواهد بود. دلیل این امر آن است که ستونهای جدیدی وجود دارند که به طور پیشفرض به انتهای جدول اضافه شدهاند. بنابراین گرچه i در ابتدا نخستین ستون در mytbl بود؛ اما اینک آخرین ستون است.
mysql> SHOW COLUMNS FROM testalter_tbl; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c | char(1) | YES | | NULL | | | i | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
برای نشان دادن این که ستونی باید در یک موقعیت خاص در جدول ایجاد شود، باید از FIRST استفاده کنید تا به عنوان ستون نخست ایجاد شود یا از ALTER col_name استفاده کنید تا تعیین کنید که ستون جدید باید پس از ستون col_name قرار گیرد.
عبارتهای ALTER TABLE زیر را با استفاده از SHOW COLUMNS پس از هر عبارت بررسی کنید تا ببینید هر کدام جه تأثیری روی جدول دارند:
ALTER TABLE testalter_tbl DROP i; ALTER TABLE testalter_tbl ADD i INT FIRST; ALTER TABLE testalter_tbl DROP i; ALTER TABLE testalter_tbl ADD i INT AFTER c;
کلیدواژههای FIRST و AFTER تنها به همراه بند ADD کار میکنند. این بدان معنی است که اگر بخواهید موقعیت یک ستون موجود را در یک جدول تغییر دهید، ابتدا باید آن را DROP کنید و سپس آن را در موقعیت جدید ADD نمایید.
تغییر دادن تعریف یا نام یک ستون
برای تغییر دادن تعریف یک ستون باید از بندهای MIDITY یا CHANGE همراه به دستور ALTER استفاده کنید.
برای نمونه برای تغییر دادن ستون c از (CHAR(1 به (CHAR(10 باید از دستور زیر استفاده کنید:
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);
البته ساختار عبارت CHANGE کمی متفاوت است. پس از کلیدواژه CHANGE باید نام ستونی که میخواهید تغییر یابد را تعیین کنید، سپس تعریف جدید را به همراه نام جدید وارد کنید. مثال زیر را امتحان کنید:
mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;
اگر میخواهید از CHANGE برای تبدیل j از BIGINT به INT بدون تغییر دادن نام ستون استفاده کنید، در این صورت عبارت به صورت زیر خواهد بود:
mysql> ALTER TABLE testalter_tbl CHANGE j j INT;
تأثیر ALTER TABLE روی خصوصیتهای با مقدار NULL و پیشفرض
زمانی که عبارتهای CHANGE یا ALTER را روی یک ستون استفاده میکنید، میتوانید تعیین کنید که ستون میتواند شامل مقادیر NULL باشد یا نباشد و این که مقدار پیشفرض آن چیست. در واقع اگر این کار را انجام ندهید، MySQL به طور خودکار مقادیری را برای این خصوصیات انتساب میدهد.
به عنوان مثال در کد زیر میبینیم که ستون NOT NULL مقدار 100 را به صورت پیشفرض دارد.
mysql> ALTER TABLE testalter_tbl -> MODIFY j BIGINT NOT NULL DEFAULT 100;
اگر از دستور فوق استفاده نکنید، در این صورت MySQL مقادیر NULL را در همه ستونها پر میکند.
تغییر دادن مقدار پیشفرض یک ستون
شما میتوانید مقداری که هر ستون به طور پیشفرض دارد، با استفاده از دستور ALTER تغییر دهید.
مثال زیر را بررسی کنید:
mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000; mysql> SHOW COLUMNS FROM testalter_tbl; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c | char(1) | YES | | NULL | | | i | int(11) | YES | | 1000 | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
میتوان فیلد پیشفرض را با استفاده از بند DROP همراه با دستور ALTER از همه ستونها حذف کرد.
mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT; mysql> SHOW COLUMNS FROM testalter_tbl; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c | char(1) | YES | | NULL | | | i | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
تغییر نوع یک جدول
شما میتوانید با استفاده از بند TYPE همراه با دستور ALTER، نوع خاصی از جدول را مورد استفاده قرار دهید. مثال زیر را برای تغییر دادن نوع جدول testalter_tbl به MYISAM بررسی کنید.
برای یافتن نوع کنونی یک جدول از عبارت SHOW TABLE STATUS استفاده کنید.
mysql> ALTER TABLE testalter_tbl TYPE = MYISAM; mysql> SHOW TABLE STATUS LIKE 'testalter_tbl'\G *************************** 1. row **************** Name: testalter_tbl Type: MyISAM Row_format: Fixed Rows: 0 Avg_row_length: 0 Data_length: 0 Max_data_length: 25769803775 Index_length: 1024 Data_free: 0 Auto_increment: NULL Create_time: 2007-06-03 08:04:36 Update_time: 2007-06-03 08:04:36 Check_time: NULL Create_options: Comment: 1 row in set (0.00 sec)
تغییر نام یک جدول
برای تغییر دادن نام یک جدول باید از گزینه RENAME به همراه عبارت ALTER TABLE استفاده کنید. مثال زیر را برای تغییر دادن نام testalter_tbl به alter_tbl مورد استفاده قرار دهید.
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;
شما میتوانید از دستور ALTER برای ایجاد و یا حذف دستور INDEX روی یک فایل MySQL استفاده کنید. در بخشهای بعدی این سلسله مطالب آموزش MySQL در این مورد بیشتر صحبت خواهیم کرد.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- انواع داده در MySQL — راهنمای جامع
- مجموعه آموزشهای پایگاه داده و سیستم های مدیریت اطلاعات
- بند WHERE در دستورات MySQL — راهنمای جامع
- عملگر LIKE در MySQL — راهنمای جامع
- مجموعه آموزشهای برنامهنویسی
==
سلام خیلی ممنون از مطالب خوبتون .چطور میشه رو دیتابیس هایی که در کنسول mysql میسازیم و با دستور show databases توسط دیگران قابل دیدنه ، رمز بزاریم که قابل تغییر توسط دیگران نباشه؟