Mysql manual, 6

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.

Схожі статті