6.5.4 Синтаксис оператора ALTER TABLE
Якщо оператор ALTER TABLE використовується для зміни визначення типу стовпця, але DESCRIBE tbl_name показує, що стовпець не змінився, то, можливо, MySQL ігнорує дану модифікацію по одній з причин, описаних в розділі section 6.5.3.1 Мовчазні зміни визначень стовпців. Наприклад, при спробі змінити стовпець VARCHAR на CHAR MySQL буде продовжувати використовувати VARCHAR. якщо дана таблиця містить інші стовпці з змінною довжиною.
Оператор ALTER TABLE під час роботи створює тимчасову копію вихідної таблиці. Необхідну зміна виконується на копії, потім вихідна таблиця віддаляється, а нова перейменовується. Так робиться для того, щоб в нову таблицю автоматично потрапляли всі оновлення крім невдалих. Під час виконання ALTER TABLE вихідна таблиця доступна для читання іншими клієнтами. Операції оновлення та записи в цій таблиці припиняються, поки не буде готова нова таблиця.
Слід зазначити, що при використанні будь-якої іншої опції для ALTER TABLE крім RENAME. MySQL завжди буде створювати тимчасову таблицю, навіть якщо дані, строго кажучи, і не потребують копіюванні (наприклад, при зміні імені стовпця). Ми плануємо виправити це в майбутньому, однак, оскільки ALTER TABLE виконується не так часто, ми (розробники MySQL) не вважаємо цю задачу першочерговим. Для таблиць MyISAM можна збільшити швидкість відтворення індексного частини (що є найбільш повільної частиною в процесі відновлення таблиці) шляхом установки змінної myisam_sort_buffer_size досить великого значення.
Нижче наводяться приклади, що показують деякі випадки вживання команди ALTER TABLE. Приклад починається з таблиці t1. яка створюється наступним чином:
Для того щоб перейменувати таблицю з t1 в t2.
Для того щоб змінити тип стовпця з INTEGER на TINYINT NOT NULL (залишаючи ім'я колишнім) і змінити тип стовпця b з CHAR (10) на CHAR (20) з перейменуванням його з b на c.
Для того щоб додати новий стовпець TIMESTAMP з ім'ям d.
Для того щоб додати індекс до колонку d і зробити стовпець a первинним ключем:
Для того щоб видалити стовпець c.
Для того щоб додати новий числовий стовпець AUTO_INCREMENT з ім'ям c.
Зауважте, що стовпець c індексується, так як стовпці AUTO_INCREMENT повинні бути індексовані, крім того, стовпець c оголошується як NOT NULL. оскільки індексовані стовпці не можуть бути NULL.
При додаванні стовпця AUTO_INCREMENT значення цього стовпця автоматично заповнюються послідовними номерами (при додаванні записів). Перший номер послідовності можна встановити шляхом виконання команди SET INSERT_ID = # перед ALTER TABLE або використання табличній опції AUTO_INCREMENT = #. See section 5.5.6 Синтаксис команди SET.
Якщо стовпець AUTO_INCREMENT для таблиць MyISAM. не змінюється, то номер послідовності залишається колишнім. При видаленні стовпчика AUTO_INCREMENT і подальшому додаванні іншого шпальти AUTO_INCREMENT номера будуть починатися знову з 1.