Sql что такое alter
SQL ALTER TABLE
Команда ALTER TABLE используется для добавления, удаления или модификации колонки в уже существующей таблице.
Команда ALTER TABLE
Команда ALTER TABLE изменяет определение таблицы одним из следующих способов:
Условие: Таблица должна быть в схеме пользователя, или пользователь должен иметь системную привилегию ALTER ANY TABLE.
Добавляя столбец с ограничением NOT NULL, разработчик или администратор БД должны учесть ряд обстоятельств. Сначала нужно создать столбец без ограничения, а затем ввести значения во все его строки. После того как все значения столбца станут не NULL-значениями, к нему можно применить ограничение NOT NULL. Если столбец с ограничением NOT NULL пытается добавить пользователь, возвращается сообщение об ошибке, говорящее о том, что либо таблица должна быть пустой, либо в столбце должны содержаться значения для каждой существующей строки (напомним, что после наложения на столбец ограничения NOT NULL в нем не могут присутствовать NULL-значения ни в одной из существующих строк). В СУБД Oracle, начиная с версии 8i, можно удалять столбцы.
Изменяя типы данных существующих столбцов или добавляя столбцы в таблицу базы данных, нужно соблюдать ряд условий. Общепринято, что увеличение – это хорошо, а уменьшение, как правило, — не очень. Допустимые увеличения:
Уменьшение различных характеристик таблицы, в том числе некоторых типов данных столбцов и реального числа столбцов таблицы, требует особых действий. Часто перед внесением изменения нужно убедиться в том, что в соответствующем столбце или столбцах все значения являются NULL-значениями. Для выполнения подобных операций над столбцами таблицы, содержащими данные, разработчик должен найти или создать какую-то область для временного хранения этих данных. Например, создать таблицу с помощью команды CREATE TABLE AS SELECT, в которой извлекаются данные из первичного ключа и изменяемого столбца или столбцов. Допустимые изменения:
ALTER TABLE Пример 1
Добавление столбца в таблицу:
ALTER TABLE t1(pole1 char(10));
ALTER TABLE Пример 2
Изменение размера столбца таблицы:
ALTER TABLE t1 MODIFY (pole1 char(20));
ALTER TABLE Пример 3
Удаление столбца таблицы:
ALTER TABLE t1 DROP COLUMN pole1;
С помощью команды ALTER TABLE можно изменить имя таблицы без реального переноса физической информации в БД:
ALTER TABLE t1 RENAME TO t2;
Аналогичную операцию можно выполнить с помощью команды RENAME:
RENAME t1 TO t2;
Ограничения целостности столбцов и таблиц БД можно изменять, а также запрещать, разрешать и удалять. Это дает разработчику возможность создавать, модифицировать и удалять бизнес-правила, ограничивающие данные. Рассмотрим добавление ограничений в БД. Простота или сложность этого процесса зависит от определенных обстоятельств. Если вместе с БД создать ограничение нельзя, проще всего добавить его перед вводом данных:
ALTER TABLE Пример 4
Модификация структуры таблицы
ALTER TABLE t1 MODIFY (pole1 NOT NULL);
CREATE TABLE t2
(pole1 CHAR(10) PRIMARY KEY);
ALTER TABLE t1 ADD
(CONSTRAINT fk_t1 FOREIGN KEY (pole1)
REFERENCES t2 (pole1));
ALTER TABLE t1 ADD (UNIQUE (p_name));
ALTER TABLE t1 ADD (p_size CHAR(4) CHECK
В первой из приведенных выше команд для добавления ограничения NOT NULL для столбца используется конструкция MODIFY, а для добавления всех табличных ограничений целостности других типов – конструкция ADD. Столбец, для которого добавляется ограничение, должен уже существовать в таблице БД; в противном случае создать ограничение не удастся.
ALTER TABLE Пример 5
Для добавления ограничений целостности можно не указывать имя создаваемого ограничения с помощью ключевого слова CONSTRAINT. В этом случае команда будет выглядеть следующим образом:
ALTER TABLE t1 ADD FOREIGN KEY (pole1) REFERENCES t2 (pole1);
Существует ряд условий создания ограничений:
Ограничения можно разрешать и запрещать. Разрешенное ограничение выполняет свои функции, реализуя бизнес-правила по отношению к вводимым в таблицу данным, а запрещенное ограничение переводится в разряд недействующих, как если бы оно было удалено, и его правила не реализуются.
ALTER TABLE Пример 6
ALTER TABLE t1 DISABLE PRIMARY KEY;
ALTER TABLE t1 DISABLE UNIQUE (p_name);
ALTER TABLE Пример 7
В некоторых случаях запрещение первичного ключа, от которого зависят внешние ключи, может вызвать определенные сложности, например:
ALTER TABLE t2 DISABLE PRIMARY KEY;
Error at line 1: Cannot disable constraint …. – dependencies exist (невозможно запретить ограничение – существуют зависимости)
Для удаления первичного ключа при наличии зависящих от него внешних ключей в команде ALTER TABLE DISABLE обязательна конструкция CASCADE:
ALTER TABLE t2 DISABLE PRIMARY KEY CASCADE;
ALTER TABLE Пример 8
Запрещенное ограничение разрешается следующим образом:
ALTER TABLE t1 ENABLE PRIMARY KEY;
ALTER TABLE t1 ENABLE UNIQUE (p_name);
Разрешить можно только те ограничения, которые были установлены ранее, а в данный момент запрещены.
Ограничение, процесс создания которого завершился неудачей, не будет существовать в запрещенном виде, ожидая своего разрешения после устранения ошибки. Как правило, владелец таблицы или тот, кому предоставлены соответствующие права, может удалить ограничение:
ALTER TABLE t1 DROP UNIQUE (p_name);
Вы должны войти, чтобы оставить комментарий.
Инструкция ALTER TABLE (Microsoft Access SQL)
Область применения: Access 2013, Office 2013
Служит для изменения макета таблицы после того, как она была создана с помощью инструкции CREATE TABLE.
Ядро СУБД Microsoft Access не поддерживает использование ALTER TABLE или любых других инструкций DDL с базами данных, которые не основаны на Microsoft Access. Используйте вместо этого методы DAO Create.
Синтаксис
ALTER TABLE таблица
Инструкция ALTER TABLE включает в себя следующие элементы:
Имя таблицы, которую требуется изменить.
Имя поля, которое будет добавлено в таблицу, удалено из нее или изменено в ней.
Размер поля в знаках (только для полей с типом данных TEXT и BINARY).
Индекс поля. Дополнительные сведения о создании этого индекса см. в статье, посвященной предложению CONSTRAINT.
Индекс набора полей, добавляемых в таблицу. Дополнительные сведения о создании этого индекса см. в статье, посвященной предложению CONSTRAINT.
Имя удаляемого индекса набора полей.
Примечания
Изменить существующую таблицу с помощью инструкции ALTER TABLE можно несколькими способами. Вы можете:
Добавить поле в таблицу, используя инструкцию ADD COLUMN. Требуется указать имя поля и тип данных. Для полей с типом данных TEXT и BINARY можно также указать размер. Например, следующая инструкция добавляет поле Notes с типом данных TEXT размером 25 знаков в таблицу Employees:
Для этого поля можно также указать индекс. Дополнительные сведения об индексах одного поля см. в статье, посвященной предложению CONSTRAINT.
Если для поля определено свойство NOT NULL, поле обязательно должно содержать допустимые данные.
Изменить тип данных для существующего поля, используя инструкцию ALTER COLUMN. Требуется указать имя поля и новый тип данных. Для полей с типом данных TEXT и BINARY можно также указать размер. Например, следующая инструкция в таблице Employees изменит тип данных поля ZipCode (начальный тип данных — INTEGER) на тип данных TEXT размером 10 знаков:
Добавить индекс набора полей, используя инструкцию ADD CONSTRAINT. Дополнительные сведения об индексах набора полей см. в статье, посвященной предложению CONSTRAINT.
Удалить поле, используя инструкцию DROP COLUMN. Требуется указать только имя поля.
Использовать DROP CONSTRAINT, чтобы удалить индекс набора полей. Требуется указать только имя индекса после зарезервированного слова CONSTRAINT.
Пример
В этом примере добавляется поле Salary (Заработная плата) с типом данных Money в таблицу Employees (Сотрудники).
В этом примере тип данных поля Salary (Заработная плата) изменяется с Money на Char.
В этом примере удаляется поле Salary (Заработная плата) из таблицы Employees (Сотрудники).
В этом примере добавляется внешний ключ для таблицы Orders (Заказы). Внешний ключ основан на поле EmployeeID (Код сотрудника) и ссылается на поле EmployeeID (Код сотрудника) таблицы Employees (Сотрудники). В этом примере не требуется перечислять поле EmployeeID (Код сотрудника) после таблицы Employees (Сотрудники) в предложении REFERENCES, так как EmployeeID — это первичный ключ таблицы Employees (Сотрудники).
В этом примере удаляется внешний ключ из таблицы Orders (Заказы).
ALTER FUNCTION (Transact-SQL)
Изменяет существующую функцию Transact-SQL или CLR, которая была предварительно создана при помощи инструкции CREATE FUNCTION, без изменения разрешений и без влияния на какие-либо зависимые функции, хранимые процедуры или триггеры.
Синтаксические обозначения в Transact-SQL
Синтаксис
Аргументы
schema_name
Имя схемы, к которой принадлежит определяемая пользователем функция.
function_name
Определенная пользователем функция, которая будет изменяться.
Даже при отсутствии аргументов скобки после имени функции обязательны.
@ parameter_name
Аргумент пользовательской функции. Может быть объявлен один или несколько аргументов.
Для функций допускается не более 2 100 параметров. При выполнении функции значение каждого из объявленных параметров должно быть указано пользователем, если для них не определены значения по умолчанию.
Определяет имя параметра, используя знак @ как первый символ. Имя параметра должно соответствовать правилам для идентификаторов. Параметры являются локальными в пределах функции, в разных функциях могут быть использованы одинаковые имена параметров. Аргументы могут использоваться только вместо констант. Они не могут использоваться вместо имен таблиц, имен столбцов или имен других объектов базы данных.
[ type_schema_name. ] parameter_data_type
Тип данных аргумента, а также схема, к которой он принадлежит. Для функций Transact-SQL допустимы любые типы данных, включая определяемые пользователем типы данных CLR, кроме типа данных timestamp. Для функций CLR допустимы любые типы данных, включая определяемые пользователем типы данных CLR, кроме типов данных text, ntext, image и timestamp. Нескалярные типы cursor и table не могут быть указаны в качестве типов данных параметров ни для функций Transact-SQL, ни для функций CLR.
Если type_schema_name не указан, Ядро СУБД SQL Server 2005 выполняет поиск parameter_data_type в следующем порядке:
Схема, содержащая имена системных типов данных SQL Server.
в установленной по умолчанию для текущего пользователя схеме в текущей базе данных;
Схема dbo в текущей базе данных.
[ = default ]
Значение по умолчанию для аргумента. Если определено значение default, то функция выполняется даже в том случае, если для данного параметра значение не указано.
Если аргумент функции имеет определенное по умолчанию значение, то ключевое слово DEFAULT должно быть задано при вызове функции для получения значения по умолчанию. Применение ключевого слова DEFAULT следует отличать от использования аргументов со значениями по умолчанию в хранимых процедурах, когда не указанный аргумент неявно принимает значение по умолчанию.
return_data_type
Возвращаемое значение скалярной пользовательской функции. Для функций Transact-SQL допустимы любые типы данных, включая определяемые пользователем типы данных CLR, кроме типа данных timestamp. Для функций CLR допустимы любые типы данных, включая определяемые пользователем типы данных CLR, кроме типов данных text, ntext, image и timestamp. Нескалярные типы cursor и table не могут быть указаны в качестве возвращаемых типов данных ни для функций Transact-SQL, ни для функций CLR.
function_body
Указывает серию инструкций Transact-SQL, совместная работа которых не вызывает побочных эффектов, например изменения содержимого таблиц, и формирует значение функции. function_body используется только в скалярных функциях и функциях с табличным значением из нескольких инструкций.
Для скалярных функций function_body представляет собой ряд инструкций Transact-SQL, которые в совокупности вычисляют скалярное выражение.
Для функций с табличным значением из нескольких инструкций function_body является рядом инструкций Transact-SQL, заполняющих возвращаемую переменную TABLE.
scalar_expression
Указывает на то, что скалярная функция возвращает скалярное значение.
TABLE
Указывает, что возвращаемым значением функции с табличным значением, является таблица. Функциям с табличным значением могут передаваться только константы и @ local_variables.
Во встроенных функциях с табличным значением возвращаемое значение TABLE определяется при использовании единственной инструкции SELECT. Встроенные функции не имеют соответствующих возвращаемых переменных.
В функциях с табличным значением из нескольких инструкций переменной @ return_variable является переменная TABLE, используемая для сохранения данных и накопления строк, которые будут возвращены в качестве значения функции. Аргумент @ return_variable может быть указан только для функций Transact-SQL, но не для функций CLR.
select-stmt
Единственная инструкция SELECT, которая определяет возвращаемое значение встроенной функции, возвращающей табличное значение.
EXTERNAL NAME assembly_name.class_name.method_name
Область применения: SQL Server 2008 и более поздних версий.
Указывает метод сборки, привязываемый к функции. Имя assembly_name должно соответствовать существующей сборке в текущей базе данных SQL Server, для которой включена видимость. Аргумент class_name должен быть допустимым идентификатором SQL Server и существовать как класс в сборке. Если класс имеет квалифицированное имя пространства имен, которое использует точку ( . ) для разделения частей пространства имен, имя класса разделено скобками ( [] ) или кавычками ( «» ). Имя method_name должно быть допустимым идентификатором SQL Server и существовать как статистический метод в указанном классе.
По умолчанию SQL Server не производит выполнение кода CLR. Можно создавать, изменять и удалять объекты базы данных со ссылками на модули среды CLR, но SQL Server не выполняет их до тех пор, пока не будет включен параметр clr enabled. Для включения параметра используйте хранимую процедуру sp_configure.
Этот параметр недоступен в автономной базе данных.
Определяет табличные типы данных для функции CLR. Объявление таблицы включает только имена столбцов и типы данных.
NULL|NOT NULL
Поддерживается только для скомпилированных в собственном коде скалярных определяемых пользователем функций. Дополнительные сведения см. в разделе Скалярные определяемые пользователем функции для выполняющейся в памяти OLTP.
NATIVE_COMPILATION
Указывает, скомпилирована ли в собственном коде определяемая пользователем функция. Этот аргумент требуется только для скомпилированных в собственном коде скалярных определяемых пользователем функций.
Аргумент NATIVE_COMPILATION является обязательным при применении ALTER к функции и может использоваться, только если функция была создана с помощью аргумента NATIVE_COMPILATION.
BEGIN ATOMIC WITH
Поддерживается только для скомпилированных в собственном коде скалярных определяемых пользователем функций и является обязательным. Дополнительные сведения см. в статье Atomic Blocks.
SCHEMABINDING
Аргумент SCHEMABINDING требуется для скомпилированных в собственном коде скалярных определяемых пользователем функций.
Указывает, что функция будет иметь один или несколько следующих аргументов:
ENCRYPTION
Область применения: SQL Server 2008 и более поздних версий.
Указывает на то, что компонент Компонент Database Engine шифрует столбцы представления каталога, содержащие текст инструкции ALTER FUNCTION. Использование параметра ENCRYPTION препятствует публикации данной функции при помощи репликации SQL Server. Параметр ENCRYPTION для функций CLR указывать нельзя.
SCHEMABINDING
Указывает, что функция привязана к объектам базы данных, которые содержат ссылки на нее. Если аргумент SCHEMABINDING указан, нельзя изменить базовые объекты таким способом, который может повлиять на определение функции. Сначала нужно изменить или удалить само определение функции, чтобы удалить зависимости от объекта, который требуется изменить.
Привязка функции к ссылающимся на нее объектам удаляется в следующих случаях:
При удалении функции.
При изменении функции инструкцией ALTER, если не указан параметр SCHEMABINDING.
Список условий, которые необходимо учитывать перед привязкой функции к схеме, см. в разделе CREATE FUNCTION (Transact-SQL).
RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT
Указывает атрибут OnNULLCall скалярной функции. Если данный аргумент не указан, по умолчанию предполагается CALLED ON NULL INPUT. Это означает, что текст функции выполняется даже в том случае, если в качестве аргумента передано значение NULL.
Если атрибут RETURNS NULL ON NULL INPUT указан для функции CLR, это означает, что SQL Server может вернуть NULL, не вызывая при этом тело функции в том случае, если в качестве какого-либо из аргументов указано значение NULL. Если определенный в метод уже обладает пользовательским атрибутом, указывающим на RETURNS NULL ON NULL INPUT, то инструкция ALTER FUNCTION указывает на CALLED ON NULL INPUT, инструкция ALTER FUNCTION обладает правом старшинства. Атрибут OnNULLCall не может быть указан для функций CLR с табличным значением.
Предложение EXECUTE AS
Указывает контекст безопасности, в котором выполняется определяемая пользователем функция. Таким образом, можно отслеживать то, какая пользовательская учетная запись SQL Server используется для проверки разрешений функции на осуществление ссылки на любые объекты базы данных.
Предложение EXECUTE AS не может быть указано для встроенных пользовательских функций.
Определяет тип данных таблицы. Декларация таблицы включает определения столбцов и ограничений. Для функций CLR можно указать только column_name и data_type.
column_name
Имя столбца в таблице. Имена столбцов должны соответствовать правилам для идентификаторов и быть уникальными в рамках таблицы. column_name может иметь длину от 1 до 128 символов.
data_type
Указывает тип данных столбца. Для функций Transact-SQL допустимы любые типы данных, включая определяемые пользователем типы данных CLR, кроме типа данных timestamp. Для функций CLR допустимы любые типы данных, включая определяемые пользователем типы данных CLR, кроме типов данных text, ntext, image, char, varchar, varchar(max) и timestamp. Нескалярный тип данных cursor не может указываться в качестве типа данных столбца ни для функций Transact-SQL, ни для функций CLR.
DEFAULT constant_expression
Указывает значение, присваиваемое столбцу в случае отсутствия явно заданного значения при вставке. Выражение constant_expression является константой, значением NULL или значением системной функции. Определения DEFAULT могут применяться к любым столбцам, кроме тех, которые имеют свойство IDENTITY. Предложение DEFAULT не может быть указано для функций CLR с табличным значением.
COLLATE collation_name
Задает параметры сортировки для столбца. Если не указано, столбцу назначаются параметры сортировки, принятые в базе данных по умолчанию. Именем параметров сортировки может быть либо имя параметров сортировки Windows, либо имя параметров сортировки SQL. Список и дополнительные сведения см. в разделах Имя параметра сортировки Windows (Transact-SQL) и Имя параметра сортировки SQL Server (Transact-SQL).
Предложение COLLATE может быть использовано для изменения параметров сортировки только для столбцов с типом данных char, varchar, nchar или nvarchar.
Предложение COLLATE не может быть указано для функций CLR с табличным значением.
ROWGUIDCOL
Указывает, что новый столбец является столбцом глобального уникального идентификатора строки. Только один столбец типа uniqueidentifier в таблице может быть назначен в качестве столбца ROWGUIDCOL. Свойство ROWGUIDCOL может быть присвоено только столбцу типа uniqueidentifier.
Свойство ROWGUIDCOL не обеспечивает уникальности значений, хранимых в столбце. Кроме того, данное свойство не производит автоматическое формирование значений для новых строк, вставляемых в таблицу. Для создания уникальных значений произвольного столбца используйте функцию NEWID в инструкции INSERT. Может быть указано значение по умолчанию. При этом функция NEWID не может быть указана в качестве значения по умолчанию.
Предложение IDENTITY не может быть указано для функций CLR с табличным значением.
seed
Целочисленное значение, присваиваемое первой строке таблицы.
increment
Целочисленное значение, добавляемое к значению seed для каждой последующей строки таблицы.
Определяет ограничение для указанного столбца или таблицы. Для функций CLR единственное допустимое ограничение — NULL. Именованные ограничения недопустимы.
NULL | NOT NULL
Определяет, допустимы ли для столбца значения NULL. Параметр NULL не является ограничением в строгом смысле слова, но может быть указан так же, как и NOT NULL. Ограничение NOT NULL не может быть указано для функций CLR с табличным значением.
PRIMARY KEY
Ограничение, обеспечивающее целостность сущностей для указанного столбца через уникальный индекс. В возвращающих табличное значение пользовательских функциях ограничение PRIMARY KEY может быть создано только для одного столбца таблицы. Ограничение PRIMARY KEY не может быть указано для функций CLR с табличным значением.
UNIQUE
Ограничение, которое обеспечивает целостность сущностей для указанного столбца или столбцов с помощью уникального индекса. В таблице может быть несколько ограничений UNIQUE. Ограничение UNIQUE не может быть указано для функций CLR с табличным значением.
CLUSTERED | NONCLUSTERED
Указывает, что для ограничения PRIMARY KEY или UNIQUE создается кластеризованный или некластеризованный индекс. Ограничения PRIMARY KEY используют параметр CLUSTERED, а ограничения UNIQUE используют параметр NONCLUSTERED.
Параметр CLUSTERED может быть указан только для одного ограничения. Если параметр CLUSTERED указан для ограничения UNIQUE и указано ограничение PRIMARY KEY, то PRIMARY KEY использует NONCLUSTERED.
Параметры СLUSTERED и NONСLUSTERED не могут быть указаны для функций CLR с табличным значением.
CHECK
Ограничение, обеспечивающее целостность домена путем ограничения возможных значений, которые могут быть введены в столбец или столбцы. Ограничения CHECK не могут быть указаны для функций CLR с табличным значением.
logical_expression
Логическое выражение, возвращающее значения TRUE или FALSE.
Указывает вычисляемый столбец. Дополнительные сведения о вычисляемых столбцах см. в разделе CREATE TABLE (Transact-SQL).
column_name
Имя вычисляемого столбца.
computed_column_expression
Выражение, определяющее значение вычисляемого столбца.
Указывает параметры индекса для индекса PRIMARY KEY или UNIQUE. Дополнительные сведения о параметрах индекса см. в разделе CREATE INDEX (Transact-SQL).
PAD_INDEX = < ON | OFF >
Определяет разреженность индекса. Значение по умолчанию — OFF.
FILLFACTOR = fillfactor
Определяет величину в процентах, указывающую, насколько компонент Компонент Database Engine должен заполнять конечный уровень каждой страницы индекса во время создания или изменения индекса. Значение fillfactor должно быть целым числом от 1 до 100. Значение по умолчанию равно 0.
IGNORE_DUP_KEY = < ON | OFF >
Определяет ответ на ошибку, случающуюся, когда операция вставки пытается вставить в уникальный индекс повторяющиеся значения ключа. Параметр IGNORE_DUP_KEY применяется только к операциям вставки, производимым после создания или перестроения индекса. Значение по умолчанию — OFF.
STATISTICS_NORECOMPUTE = < ON | OFF >
Указывает, выполнялся ли перерасчет статистики распределения. Значение по умолчанию — OFF.
ALLOW_ROW_LOCKS = < ON | OFF >
Указывает, разрешена ли блокировка строк. Значение по умолчанию — ON.
ALLOW_PAGE_LOCKS = < ON | OFF >
Указывает, разрешена ли блокировка страниц. Значение по умолчанию — ON.
Remarks
ALTER FUNCTION не может использоваться для преобразования скалярной функции в функцию с табличным значением или наоборот. Также ALTER FUNCTION не может использоваться для преобразования одной встроенной функции в функцию из нескольких инструкций или наоборот. ALTER FUNCTION не может использоваться для преобразования функции Transact-SQL в функцию среды CLR или наоборот.
Следующие инструкции компонента Service Broker не могут быть включены в определение Transact-SQL пользовательской функции:
Разрешения
Требует разрешения ALTER для функции или для схемы. Если в функции указан определяемый пользователем тип, требуется разрешение EXECUTE на этот тип.