ALTER TABLE — изменение таблицы в SQL
Команда ALTER TABLE применяется в SQL при добавлении, удалении либо модификации колонки в существующей таблице. В этой статье будет рассмотрен синтаксис и примеры использования ALTER TABLE на примере MS SQL Server.
SQL-оператор ALTER TABLE способен менять определение таблицы несколькими способами: • добавлением/переопределением/удалением столбца (column); • модифицированием характеристик памяти; • включением, выключением либо удалением ограничения целостности.
При этом пользователю нужно обладать системной привилегией ALTER ANY TABLE либо таблица должна находиться в схеме пользователя.
Меняя типы данных существующих columns либо добавляя их в БД-таблицу, следует соблюдать некоторые условия. Принято, что увеличение есть хорошо, а уменьшение — не очень. Существует ряд допустимых увеличений: • добавляем новые столбцы в таблицу; • увеличиваем размер столбца CHAR либо VARCHAR2; • увеличиваем размер столбца NUMBER.
Нередко перед внесением изменений следует удостовериться, что в соответствующих columns все значения — это NULL-значения. Если выполняется операция над столбцами, которые содержат данные, следует найти либо создать область временного хранения данных. Можно создать таблицу посредством CREATE TABLE AS SELECT, где извлекаются данные из первичного ключа и изменяемых columns. Существует ряд допустимых изменений: • уменьшаем размер столбца NUMBER (лишь при наличии пустого column для всех строк); • уменьшаем размер столбца CHAR либо VARCHAR2 (лишь при наличии пустого column для всех строк); • меняем тип данных столбца (аналогично, что и в первых двух пунктах).
При добавлении column с ограничением NOT NULL, администратор баз данных либо разработчик обязан учесть некоторые обстоятельства. Вначале следует создать столбец без ограничения, потом ввести значения во все строки. Далее, когда значения column будут уже не NULL, к нему можно будет применить ограничение NOT NULL. Но если column с ограничением NOT NULL хочет добавить юзер, то вернётся сообщение об ошибке, судя по которому таблица должна быть либо пустой, либо содержать в столбце значения для каждой имеющейся строки (после наложения на column NOT NULL-ограничения, в нём не смогут присутствовать значения NULL ни в одной из имеющихся строк).
Синтаксис ALTER TABLE на примере MS SQL Server
Рассмотрим общий формальный синтаксис на примере SQL Server от Microsoft:
ALTER TABLE имя_таблицы [WITH CHECK | WITH NOCHECK]
Итак, используя SQL-оператор ALTER TABLE, мы сможем выполнить разные сценарии изменения таблицы. Далее будут рассмотрены некоторые из этих сценариев.
Добавляем новый столбец
Для примера добавим новый column Address в таблицу Customers:
ALTER TABLE Customers ADD Address NVARCHAR(50) NULL;В примере выше столбец Address имеет тип NVARCHAR, плюс для него определён NULL-атрибут. Если же в таблице уже существуют данные, команда ALTER TABLE не выполнится. Однако если надо добавить столбец, который не должен принимать NULL-значения, можно установить значение по умолчанию, используя атрибут DEFAULT:
ALTER TABLE Customers ADD Address NVARCHAR(50) NOT NULL DEFAULT 'Неизвестно';Тогда, если в таблице существуют данные, для них для column Address добавится значение "Неизвестно".
Удаляем столбец
Теперь можно удалить column Address:
ALTER TABLE Customers DROP COLUMN Address;Меняем тип
Продолжим манипуляции с таблицей Customers: теперь давайте поменяем тип данных столбца FirstName на NVARCHAR(200).
ALTER TABLE Customers ALTER COLUMN FirstName NVARCHAR(200);Добавляем ограничения CHECK
Если добавлять ограничения, SQL Server автоматически проверит существующие данные на предмет их соответствия добавляемым ограничениям. В случае несоответствия, они не добавятся. Давайте ограничим Age по возрасту.
ALTER TABLE Customers ADD CHECK (Age > 21);При наличии в таблице строк со значениями, которые не соответствуют ограничению, sql-команда не выполнится. Если надо избежать проверки и добавить ограничение всё равно, используют выражение WITH NOCHECK:
ALTER TABLE Customers WITH NOCHECK ADD CHECK (Age > 21);По дефолту применяется значение WITH CHECK, проверяющее на соответствие ограничениям.
Добавляем внешний ключ
Представим, что изначально в базу данных будут добавлены 2 таблицы, которые между собой не связаны:
Теперь добавим к столбцу CustomerId ограничение внешнего ключа (таблица Orders):
ALTER TABLE Orders ADD FOREIGN KEY(CustomerId) REFERENCES Customers(Id);Добавляем первичный ключ
Применяя определенную выше таблицу Orders, можно добавить к ней для столбца Id первичный ключ:
ALTER TABLE Orders ADD PRIMARY KEY (Id);Добавляем ограничения с именами
Добавляя ограничения, можно указать имя для них — для этого пригодится оператор CONSTRAINT (имя прописывается после него):
Удаляем ограничения
Чтобы удалить ограничения, следует знать их имя. Если с этим проблема, имя всегда можно определить с помощью SQL Server Management Studio:
Следует раскрыть в подузле Keys узел таблиц, где находятся названия ограничений для внешних ключей (названия начинаются с «FK»). Обнаружить все ограничения DEFAULT (названия начинаются с «DF») и CHECK («СК») можно в подузле Constraints.
Из скриншота видно, что в данной ситуации имя ограничения внешнего ключа (таблица Orders) имеет название "FK_Orders_To_Customers". Здесь для удаления внешнего подойдёт такое выражение:
ALTER TABLE Orders DROP FK_Orders_To_Customers;Хотите знать про SQL Server больше? Добро пожаловать на курс "MS SQL Server Developer" в OTUS! Также вас может заинтересовать общий курс по работе с реляционными и нереляционными БД:
SQL ALTER TABLE
Инструкция ALTER TABLE используется для добавления, удаления или изменения столбцов в существующей таблице.
Инструкция ALTER TABLE также используется для добавления и удаления различных ограничений на существующую таблицу.ALTER TABLE - ADD column
Чтобы добавить столбец в таблицу, используйте следующее синтаксис:
ALTER TABLE table_name
ADD column_name datatype;Следующий SQL - добавляет колонку "Email" для таблицы "Customers":
Пример
ALTER TABLE Customers
ADD Email varchar(255);ALTER TABLE - DROP COLUMN
Чтобы удалить столбец в таблице, используйте следующую команду синтаксиса (обратите внимание, что некоторые системы баз данных не позволяют удалить столбец):
ALTER TABLE table_name
DROP COLUMN column_name;Следующий SQL удаляет столбец "Email" из таблицы "Customers":
Пример
ALTER TABLE Customers
DROP COLUMN Email;ALTER TABLE - ALTER/MODIFY COLUMN
Чтобы изменить тип данных столбца в таблице, используйте следующие синтаксис:
SQL Сервер / MS Доступ:
ALTER TABLE table_name
ALTER COLUMN column_name datatype;My SQL / Оракул (предыдущая версия 10G):
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;Оракул 10G и более поздние версии:
ALTER TABLE table_name
MODIFY column_name datatype;Пример ALTER TABLE
Посмотрите на таблицу "Persons":
| ID | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Hansen | Ola | Timoteivn 10 | Sandnes |
| 2 | Svendson | Tove | Borgvn 23 | Sandnes |
| 3 | Pettersen | Kari | Storgt 20 | Stavanger |
Теперь мы хотим добавить столбец с именем "DateOfBirth" в таблицу "Persons".
Мы используем следующую инструкцию SQL:
ALTER TABLE Persons
ADD DateOfBirth date;
Обратите внимание, что новый столбец "DateOfBirth" имеет тип date и будет содержать дату. Тип данных указывает, какой тип данных может содержать столбец. Для получения полного описания всех типов данных, доступных в MS Access, MySQL и SQL Server, перейдите к нашему полному Справочнику типов данных.
Таблица "Persons" теперь будет выглядеть так:
| ID | LastName | FirstName | Address | City | DateOfBirth |
|---|---|---|---|---|---|
| 1 | Hansen | Ola | Timoteivn 10 | Sandnes | |
| 2 | Svendson | Tove | Borgvn 23 | Sandnes | |
| 3 | Pettersen | Kari | Storgt 20 | Stavanger |
Пример изменения типа данных
Теперь мы хотим изменить тип данных столбца с именем "DateOfBirth" в таблице "Persons".
Мы используем следующую инструкцию SQL:
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;
Обратите внимание, что столбец "DateOfBirth" теперь имеет тип year и будет содержать year в двух или четырехзначном формате.
Пример DROP COLUMN
В первую очередь, мы хотим удалить столбец с именем "DateOfBirth" в таблице "Persons".
Мы используем следующую инструкцию SQL:
ALTER TABLE Persons
DROP COLUMN DateOfBirth;
Таблица "Persons" теперь будет выглядеть так:
| ID | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Hansen | Ola | Timoteivn 10 | Sandnes |
| 2 | Svendson | Tove | Borgvn 23 | Sandnes |
| 3 | Pettersen | Kari | Storgt 20 | Stavanger |
Мы только что запустили
SchoolsW3 видео
курс сегодня!
Сообщить об ошибке
Если вы хотите сообщить об ошибке или внести предложение, не стесняйтесь отправлять на электронное письмо:
Ваше предложение:
Спасибо Вам за то, что помогаете!
Ваше сообщение было отправлено в SchoolsW3.
Schoolsw3 оптимизирован для бесплатного обучения, проверки и подготовки знаний. Примеры в редакторе упрощают и улучшают чтение и базовое понимание. Учебники, ссылки, примеры постоянно пересматриваются, чтобы избежать ошибок, но не возможно гарантировать полную правильность всего содержания. Некоторые страницы сайта могут быть не переведены на РУССКИЙ язык, можно отправить страницу как ошибку, так же можете самостоятельно заняться переводом. Используя данный сайт, вы соглашаетесь прочитать и принять Условия к использованию, Cookies и политика конфиденциальности.
Как добавить столбец со значением по умолчанию к существующей таблице в SQL Server
В SQL-сервере для добавления столбца со значением по умолчанию в существующую таблицу используйте ALTER Таблица ADD имя столбца с ограничением NULL/NOT NULL со значением DEFAULT .
Приведенный ниже синтаксис запроса sql server может быть использован для добавления столбца со значением по умолчанию в существующую таблицу.
Давайте рассмотрим пример, чтобы лучше понять это.
Добавление не нулевого столбца со значением по умолчанию для существующих записей #
Рассмотрим таблицу Employee в SQL-сервере, и если мы хотим добавить столбец минимальной заработной платы со значением по умолчанию 1000USD , используйте следующий запрос.
Приведенный выше запрос добавит новый столбец MINIMUM_WAGE в таблицу Employee и заполнит столбец в существующих строках значением по умолчанию, т.е. 1000 .
Поскольку мы добавили ограничение NOT NULL .
Если вы не добавите ограничение NOT NULL , все существующие строки будут NULL , а значение DEFAULT не будет иметь никакого влияния.
Все значения столбца MINIMUM_WAGE будут NULL .
Вам нужно добавить значение DEFAULT , если вы добавляете ограничение NOT NULL , если таблица не пуста.
Например, если таблица Employee не пуста, и если вы добавите новый столбец с ограничением NOT NULL , это приведет к ошибке.
Приведенный выше запрос sql server выдаст следующую ошибку при добавлении нового столбца в существующую таблицу.
Если таблица Employee пуста.
Приведенный выше запрос sql server добавит новый столбец без каких-либо проблем.
Добавление нулевого столбца со значением по умолчанию для существующих записей #
Если вы хотите добавить нулевой столбец со значением по умолчанию для существующих записей, вам необходимо использовать WITH VALUES в sql-запросе.
Приведенный выше запрос добавит в таблицу sql server nullable столбец со значением по умолчанию для существующих записей.
В этом учебнике мы научились добавлять столбцы, как нулевые, так и не нулевые, в таблицу sql server со значением по умолчанию для всех существующих записей.
Don't be a Stranger. Connect me at Social Networking Sites.
Stay in the loop
Get a short & sweet tutorials delivered to your inbox every couple of days. No spam ever. Unsubscribe any time.
Как добавить столбец в таблицу MySQL
В СУБД MySQL, как и в других базах данных помимо добавления и извлечения данных можно изменять структуру таблиц. Одной из таких возможностей является добавление нового столбца или столбцов в уже существующую таблицу. Для добавления новых столбцов существует специальная команда - ALTER TABLE ADD COLUMN.
В качестве параметров также можно задать ротацию, т.е. выбрать после каких уже существующих столбцов в таблице необходимо добавлять новые. В данной статье будет рассмотрено как выполняется добавление столбца в таблицу MySQL версии в операционной системе Ubuntu 20.04.
Как добавить столбец в таблицу MySQL
Для добавления новых столбцов в таблицу в СУБД MySQL присутствует специальная команда - ALTER TABLE ADD COLUMN. Ниже предоставлен её синтаксис:
ALTER TABLE имя_таблицы ADD COLUMN имя_нового_столбца тип_данных [ FIRST|AFTER имя_существующего_столбца ];
Сначала указывается имя таблицы, в которую будет добавлен новый столбец. Имя идёт сразу после команды ALTER TABLE. Далее после директивы ADD COLUMN необходимо указать имя нового столбца, который будет создан и задать его тип данных. Ключевое слово COLUMN можно опустить, оно не обязательно. Также в качестве дополнительных параметров можно указать положение нового столбца в таблице. Если указать FIRST, то столбец будет создан в самом начале таблице, также можно указать расположение после специфического столбца (при условии, что он присутствует в таблице) для этого необходимо вписать ключевое слово AFTER и указать имя уже существующего столбца в таблице.
В качестве примера будет создана таблица с именем personal_information и состоящая из одного столбца с именем id. Команда для создания таблицы с одним столбцом приведена ниже:
CREATE TABLE IF NOT EXISTS personal_information (id INT AUTO_INCREMENT PRIMARY KEY);

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

Помимо вывода всех столбцов в таблице команда DESCRIBE также отображает типы данных столбцов а также наличие первичных и внешних ключей.
Добавление одного столбца в таблицу
Для того чтобы добавить столбец в таблицу MySQL не задавая порядок (при отсутствии порядка новый созданный столбец будет помещен в самый конец таблицы, в данном примере новый столбец с именем name будет находиться после столбца с именем id) необходимо выполнить следующую команду:
ALTER TABLE personal_information ADD COLUMN name VARCHAR(50) NOT NULL;

Добавление нескольких столбцов в таблицу
Для добавления двух и более столбцов необходимо воспользоваться той же командой ALTER TABLE ADD COLUMN при этом перечисляя данный аргумент через запятую. В примере ниже в таблицу с именем personal_information будут добавлены 2 новых столбца с именами last_name и city так как позиция столбцов не была указана, столбцы будут добавлены в конец таблицы. Команда будет выглядеть следующим образом:
ALTER TABLE personal_information ADD COLUMN last_name VARCHAR(50) NOT NULL, ADD COLUMN city VARCHAR (100) NOT NULL;

Добавление столбца в начало таблицы
Если присутствует необходимость в добавлении столбца в самое начало таблицы это можно сделать, добавив параметр FIRST в команду ALTER TABLE ADD COLUMN. Для начала выведем все столбцы таблицы с именем personal_information:

Теперь необходимо добавить новый столбец с именем customer_id который должен находиться перед столбцом id. Команда для добавления данного столбца будет выглядеть следующим образом:
ALTER TABLE personal_information ADD COLUMN customer_id INT FIRST;

Как видно на скриншоте выше новый столбец с именем customer_id был добавлен в самое начало (первым был столбец с именем id).
Добавление столбца после определённого столбца
Также создать столбец MySQL можно после определенного столбца. В качестве примера необходимо добавить новый столбец с именем country который должен находиться после столбца last_name (см. структуру таблицы ниже):

Для того чтобы добавить новый столбец после определенного столбца необходимо добавить параметр AFTER после которого следует имя уже присутствующего столбца в таблице. Команда будет выглядеть следующим образом:
ALTER TABLE personal_information ADD COLUMN country VARCHAR(100) AFTER last_name;

Новый созданный столбец country был добавлен после столбца last_name (см. скриншот выше).
Выводы
В данной небольшой статье была рассмотрено как добавить столбец в таблицу MySQL. Помимо этого, были описаны такие возможности добавления как добавление столбцов в самое начло таблицы и после специфического столбца. Есть ли у вас опыт работы с СУБД MySQL? Расскажите в комментариях!


