Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по SQL http.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
671.74 Кб
Скачать

Настройка внешнего ключа

Что произойдет, если послана команда на удаление записи в родительской таблице на которую ссылается внешний ключ? По умолчанию СУБД не позволит удалить такую запись и выведет сообщение об ошибке. Однако есть еще как минимум два возможных варианта, которые задаются при определении внешнего ключа. Первый, это установить значение внешнего ключа в null, естественно при определении столбца не должно быть указано NOT NULL. А второй вариант, удалить все записи в дочерней таблице, которые ссылаются на удаляемую запись в родительской таблице. Такое удаление называется каскадным.

-- определение ключа, с установкой в null

-- при удалении записи на которую происходит ссылка

FOREIGN KEY (fk_key1)

REFERENCES tb(id)

ON DELETE SET NULL

-- определение ключа с каскадным удалением

FOREIGN KEY (fk_key1)

REFERENCES tb(id)

ON DELETE CASCADE

Создание по выборке

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

-- сохраняем данные tblname в tblname1

create table tblname1 as select * from tblname

Дополнительные параметры таблицы

В зависимости от СУБД после закрывающей скобки могут идти дополнительные опции, например управление табличным пространством. Если они не указаны, то используются значения по умолчанию.

-- пример для Oracle

CREATE TABLE tblname (

...

)

PCTFREE 10

PCTUSED 40

TABLESPACE users

STORAGE

(INITIAL 50K

NEXT 50K

MAXEXTENTS 10

PCTINCREASE 25

);

-- пример для MySQL

CREATE TABLE tblname (

...

)

ENGINE = InnoDB;

Изменение, удаление таблицы

Команда ALTER позволяет изменить объект, команда DROP удалить объект из БД.

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

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

ALTER TABLE tblname RENAME TO tblname3;

-- переименование столбца oldname в newname

ALTER TABLE tblname RENAME oldname TO newname;

Добавление/удаление столбца

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

-- добавление

ALTER TABLE tblname ADD COLUMN num1 integer;

-- удаление

ALTER TABLE tblname DROP COLUMN num1;

Первичный ключ

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

-- добавление

ALTER TABLE tblname

ADD CONSTRAINT pk_tblname PRIMARY KEY (id);

-- удаление

ALTER TABLE tblname

DROP PRIMARY KEY;

-- с удалением всех записей в других таблицах,

-- ссылающихся на этот ключ

ALTER TABLE tblname DROP PRIMARY KEY CASCADE;

Уникальный ключ

-- добавление

ALTER TABLE tblname

ADD CONSTRAINT uk_tblname2 UNIQUE (birth)

--удаление

ALTER TABLE tblname DROP CONSTRAINT uk_tblname2;

-- удаление для MySQL

ALTER TABLE tblname DROP KEY uk_tblname2;