Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка SQL(14) (оптимизация).docx
Скачиваний:
62
Добавлен:
17.03.2015
Размер:
452.16 Кб
Скачать

9.2. Изменение таблицы после того как она была создана (alter table).

В уже созданную таблицу изменения могут быть внесены с помощью оператора ALTER TABLE, который имеет следующий обобщенный формат:

ALTER TABLE <Имя таблицы>

ALTER COLUMN <Имя столбца> <Тип данных> [NOT NULL] [UNIQUE]

[DEFAULT <Значение по умолчанию>] [CHECK (<Условие проверки на Допустимость>)]

| ADD [COLUMN] <Имя столбца> <Тип данных> [NOT NULL] [UNIQUE]

[DEFAULT <Значение по умолчанию>] [CHECK (<Условие проверки на Допустимость>)]

| DROP [COLUMN] <Имя столбца> [RISTRICT | CASCADE]

| ADD [CONSTRAINT [(<Имя ограничения>)] <Ограничение>]

| DROP CONSTRAINT <Имя ограничения> [RISTRICT | CASCADE]

В данном формате предусмотрены возможности для выполнения ряда действий:

• изменить существующий столбец в существующей таблице — ALTER COLUMN;

• добавить новый столбец в существующую таблицу — ADD COLUMN;

• удалить столбец из существующей таблицы — DROP COLUMN;

• добавить в определение таблицы новое ограничение — ADD CONSTRAINT;

• удалить из определения таблицы существующее ограничение — DROP CONSTRAINT.

Пример добавления столбца

CREATE TABLE doc_exa (column_a INT);

ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL;

Пример удаления столбца

CREATE TABLE doc_exb (column_a INT, column_b VARCHAR(20) NULL);

ALTER TABLE doc_exb DROP COLUMN column_b;

Пример изменения типа данных столбца (с INT на DECIMAL)

CREATE TABLE doc_exy (column_a INT );

INSERT INTO.doc_exy (column_a) VALUES (10);

ALTER TABLE doc_exy ALTER COLUMN column_a DECIMAL (5, 2);

Пример добавления нового столбца с ограничением UNIQUE.

CREATE TABLE doc_exc (column_a INT);

ALTER TABLE doc_exc ADD column_b VARCHAR(20) NULL

CONSTRAINT exb_unique UNIQUE;

Пример добавления непроверяемого ограничения CHECK к существующему столбцу.

CREATE TABLE doc_exd ( column_a INT);

INSERT INTO doc_exd VALUES (-1);

ALTER TABLE doc_exd WITH NOCHECK

ADD CONSTRAINT exd_check CHECK (column_a > 1);

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

Пример добавления ограничения DEFAULT во второй столбец.

CREATE TABLE doc_exz ( column_a INT, column_b INT) ;

INSERT INTO doc_exz (column_a) VALUES ( 7 );

ALTER TABLE doc_exz ADD CONSTRAINT col_b_def DEFAULT 50 FOR column_b;

9.3. Удаление таблицы (drop table).

Синтаксис

DROP TABLE <Имя таблицы> [,<Имя таблицы> … ];

Удаляет одно или больше определений таблиц и все данные, индексы, триггеры, ограничения и разрешения для этих таблиц. Любое представление или хранимая процедура, ссылающаяся на удаленную таблицу, должна быть явно удалена с помощью инструкции DROP VIEW или DROP PROCEDURE.

Инструкцию DROP TABLE нельзя использовать для удаления таблицы, на которую ссылается ограничение FOREIGN KEY. Сначала следует удалить ссылающееся ограничение FOREIGN KEY или ссылающуюся таблицу. Если и ссылающаяся таблица, и таблица, содержащая первичный ключ, удаляются с помощью одной инструкции DROP TABLE, ссылающаяся таблица должна быть первой в списке.

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

При удалении всех строк в таблице с помощью инструкции DELETE tablename или TRUNCATE TABLE таблица продолжает существовать, пока она не будет удалена.

Пример

DROP TABLE Состав;