English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQLизменениетаблицы(ALTER TABLE команда)

Вэтомкурсевыучите,какиспользоватьSQLчтобыизменитьилиизменитьсуществующуютаблицу.

Изменениесуществующейтаблицы

Послестворениятаблицывероятно,вашепервоенепосредственновладениеэтойтаблицейможетпоказать,чтовызабылисоздатьнеобходимыйстолбецилиограничение,илиназначилинеправильноеимястолбцу.

ВэтомслучаевыможетеиспользоватьэтюкомандуALTER TABLEчтобыизменитьилиизменитьсуществующуютаблицу,добавив,изменивилиудаливстолбец.

Рассмотримнашshippersвбазеданныху насестьтаблица,ееструктуратакова:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key  | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id   | int         | NO  | PRI  | NULL    | auto_increment |
| shipper_name | varchar(60) | NO  |    | NULL    |                |
| phone        | varchar(60) | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

МыбудемиспользоватьэтотстолбецshippersдлявсехоперацийALTERtable.

Теперьпредположим,чтомыхотимрасширитьсуществующуютаблицуshippersдобавлениемновог stolbca.Но,вопросвтом,какмыможемсделатьэтоделавсейкомандойSQL?Давайтепосмотрим.

Добавление новог stolbca

 Основнаяграмматикадобавленияновог stolbca в существующую таблицу:

ALTER TABLE table_name ADD column_name data_type constraints;					

Нижеуказанныестрокидобавляютновыйстолбецfaxвтаблицуshippers.

ALTER TABLE shippers ADD fax VARCHAR(20);

Теперь,послеисполнениявышеуказанныхопераций,есливыиспользуетекомандуDESCRIBE shippersиувиделиструктурутаблицы;вMySQLкоманднойстроке,какпоказанониже:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key  | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id   | int         | NO  | PRI  | NULL    | auto_increment |
| shipper_name | varchar(60) | NO  |    | NULL    |                |
| phone        | varchar(60) | NO   |     | NULL    |                |
| fax          | varchar(20) | YES  |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

Внимание:ЕсливыхотитедобавитьстолбецNOTNULLвсуществующуютаблицу,тогдаобязателенозадатьявноеdefaultзначениеЭтотdefaultзначенииспользуетсядлязаполненияновогостолбцаvoorсуществующихстроквтаблице.

Совет: }}При добавлении нового столбца в таблицу, если ни NULL, ни NOT NULL не указаны, столбец будет视为 уже указанным NULL.

MySQL по умолчанию добавляет новые столбцы в конце. Однако, если вы хотите добавить новый столбец после определенного столбца, вы можете использовать следующий AFTER предложение:

mysql> ALTER TABLE shippers ADD fax VARCHAR(20) AFTER shipper_name;					

MySQL предоставляет другую предложную часть, которую вы можете использовать для добавления нового столбца в начале таблицы. Достаточно заменить AFTER предложную часть FIRST в предыдущем примере, чтобы добавить вshippersДобавление столбца fax в начало таблицы.

изменение положения столбца

В MySQL, если вы уже создали таблицу, но не удовлетворены положением существующих столбцов в таблице, вы можете随时 изменить их с помощью следующей грамматики:

ALTER TABLE table_name
  MODIFY column_name column_definition AFTER column_name;			

следующие строки изменят столбецfaxпомещаетсяshippersв таблицеshipper_nameпосле столбца.

mysql> ALTER TABLE shippers MODIFY fax VARCHAR(20) AFTER shipper_name;					

добавление ограничения

У нас есть основная проблема с текущей таблицей shippers. Даже если вы вставите запись с повторным номером телефона, это не предотвратит этого, это不好, номер телефона должен быть уникальным.

Вы можете добавить ограничение,phoneдобавление ограничения UNIQUE к столбцу для решения этой проблемы. Основная грамматика для добавления ограничения к существующему столбцу таблицы:

ALTER TABLE table_name ADD UNIQUE (column_name,...);					

Следующие строки UNIQUE добавляются кphoneдобавление ограничения к столбцу.

mysql> ALTER TABLE shippers ADD UNIQUE (phone);					

После выполнения этой строки, если вы попытаетесь вставить повторный номер телефона, вы получите ошибку сообщения.

Таким образом, если в таблице, которую вы создали, нет PRIMARY KEY, вы можете использовать следующее:

ALTER TABLE table_name ADD PRIMARY KEY (column_name,...);					

если оно не определено, следующие строки будутPRIMARY KEY ограничение добавляется кshipper_idстолбец.

mysql> ALTER TABLE shippers ADD PRIMARY KEY (shipper_id);					

Удаление столбца

Основная грамматика для удаления столбца из существующей таблицы:

ALTER TABLE table_name DROP COLUMN column_name;					

Следующее предложение удаляетshippersиз таблицы удаляем добавленный намиfaxстолбец.

mysql> ALTER TABLE shippers DROP COLUMN fax;					

Теперь, после выполнения вышеуказанного предложения, если вы видите структуру таблицы, она будет выглядеть так:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key  | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id   | int         | NO  | PRI  | NULL    | auto_increment |
| shipper_name | varchar(60) | NO  |    | NULL    |                |
| phone        | varchar(20) | NO  | UNI  | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

Изменение типа данных столбца

Вы можете использовать следующее предложение ALTER для изменения типа данных столбца в SQL Server:

ALTER TABLE table_name ALTER COLUMN column_name new_data_type;					

Но сервер базы данных MySQL не поддерживает грамматический строй ALTER COLUMN. Он поддерживает альтернативные предложения для изменения столбца, как показано ниже:

ALTER TABLE table_name MODIFY column_name new_data_type;					

Следующее предложение будетshippersв таблицеphoneТекущий тип данных столбца изменяется с VARCHAR на CHAR, длина изменяется с 20 на 15.

mysql> ALTER TABLE shippers MODIFY phone CHAR(15);					

Аналогично, вы можете использовать предложение MODIFY для переключения между тем, позволяет ли столбец MySQL быть пустым или нет, повторно определив существующее определение столбца и добавив в конце ограничение null или not null, как показано ниже:

mysql> РЕМОНТ ТАБЛИЦЫ shippers МОДИФИЦИРОВАТЬ shipper_name CHAR(15) НЕ NULL;					

Переименование таблицы

Основная грамматика для renaming существующих таблиц в MySQL:

ALTER TABLE current_table_name РЕМОНТ new_column_name;					

Следующие инструкции будут rename ourshippersПереименование таблицыshipper.

mysql> РЕМОНТ ТАБЛИЦЫ shippers В shipper;					

Вы также можете использовать следующую команду RENAME TABLE для достижения той же цели в MySQL:

mysql> РЕМОНТ ТАБЛИЦЫ shippers В shipper;