English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Вэтомкурсевыучите,какиспользовать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 в существующую таблицу:
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;