با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش MySQL را دنبال می کنند. گاهی ممکن است به دلایلی لازم شود که نام یک جدول و یا نام یک فیلد یا فیلدهایی از جدول را تغییر دهید. همچنین شاید خواسته باشید یکی از ستون های موجود در جدول را حذف کرده و یا اینکه ستونی را به آن اضافه نمائید، برای تغییرات نام جداول و فیلدها و یا افزودن ستونی به جدول و یا حذف یک ستون موجود ، می توان از دستور ALTER در MySQL استفاده نمود ، در ادامه ی این آموزش شما را با چگونگی استفاده از دستور ALTER در MySQL آشنا خواهیم کرد.
در ادامه ی این مباحث با چگونگی و چند نمونه از موارد استفاده از دستور ALTER در MySQL آشنا خواهید شد.
دستور ALTER در MySQL برای هر گونه تغییر در نام جداول یا ستون ها و یا افزودن و حذف ستون ها کاربرد دارد.
ابتدا برای نمونه جدولی با نام testalter_tbl را ایجاد می کنیم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 بصورت زیر استفاده کنید:
1 | mysql> ALTER TABLE testalter_tbl DROP i; |
نکته:
اگر جدول تنها شامل یک ستون باشد، دستور DROP عمل نخواهد کرد.
برای افزودن ستون می توان از دستور ADD در تعریف ستون بعد از ALTER استفاده کرد.
نمونه کد زیر ستون i را به جدول testalter_tbl اضافه می کند :
1 | mysql> ALTER TABLE testalter_tbl ADD i INT; |
پس از افزودن مجدد ستون i به جدول testalter_tbl ساختار آن مانند قبل نخواهد بود چراکه در ابتدا ستون i اولین ستون این جدول بود اما با حذف و افزودن مجدد آن به جدول، ستونی که به تازگی اضافه شده به انتهای جدول اضافه می شود.
1 2 3 4 5 6 7 8 | 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) |
حالا اگر می خواهید ستونی که اضافه می کنید به ابتدای جدول اضافه شود در انتهای ALTER از کلمه کلیدی FIRST استفاده کنید.
اگر می خواهید ستون جدید بعد از یک ستون مشخص در جدول قرار گیرد نام آن ستون را پس از AFTER و نام ستون جدید را قبل از آن قرار دهید.
در مثال زیر ستون i یکبار به عنوان اولین ستون به جدول اضافه می شود و بار دیگر پس از ستون c به جدول اضافه می شود:
1 2 3 4 | 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 کار می کنند.
این به این معنی است که اگر می خواهید موقعیت یک ستون را در جدول تغییر دهید ابتدا باید آن را حذف کرده و سپس موقعیت جدید آن را با ADD تعیین کنید.
برای تغییر دادن تعریف ستون از کلمات کلیدی MODIFY یا CHANGE در دستور ALTER استفاده کنید.
برای مثال، برای تغییر دادن ستون c از (CHAR(1 به (CHAR(10 می توانید از دستور زیر استفاده کنید :
1 | mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10); |
با CHANGE ، سینتکس یک بیت متفاوت است. پس از کلمه کلیدی CHANGE نام ستون را برای تغییر قرار دهید.
سپس تعریف جدیدی را تعریف می کنید که شامل نام جدید است.
مثال زیر را در نظر بگیرید :
1 | mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT; |
برای تغییر j از BIGINT به INT بدون تغییر نام ستون، کد باید به صورت زیر باشد:
1 | mysql> ALTER TABLE testalter_tbl CHANGE j j INT; |
هنگام تغییر یا تغییر یک ستون، می توانید مشخص کنید که آیا ستون می تواند مقادیر NULL یا مقادیر پیش فرض آن را داشته باشد یا خیر.
در واقع، اگر شما این کار را نکنید، MySQL به طور خودکار مقادیر برای این ویژگی ها را اختصاص می دهد.
در نمونه کد زیر ستونی که NOT NULL باشد، مقدار پیش فرض ۱۰۰ را داراست :
1 2 | mysql> ALTER TABLE testalter_tbl -> MODIFY j BIGINT NOT NULL DEFAULT 100; |
اگر از کد فوق استفاده نکنید ، MySQL تمام ستون ها را با مقادیر NULL پر خواهد کرد.
شما می توانید یک مقدار پیش فرض را برای هر ستونی با استفاده از ALTER تعریف کنید.
مثال زیر را در نظر داشته باشید :
1 2 3 4 5 6 7 8 9 | 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 حذف کنید.
1 2 3 4 5 6 7 8 9 | 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 تغییر می دهیم.
برای پیدا کردن TYPE جاری جداول می توان از SHOW TABLE STATUS استفاده کرد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 تغییر می کند :
1 | mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl; |
شما می توانید از دستور ALTER برای ایجاد و رها کردن دستور INDEX در فایل MySQL استفاده کنید.
پس از تعریف و ایجاد ساختار جداول و ستون ها در دیتابیس های MySQL ، به دلایل مختلفی ممکن است بخواهید نام جداول و فیلدها یا ترتیب قرار گیری ستونها را تغییر داده و یا آن ها را حذف و اضافه کنید، در چنین مواردی می توان از دستور ALTER در MySQL استفاده نمود.