
- •Введение
- •Прочие команды
- •Структура базы данных
- •Ключи, ограничения
- •Индексы
- •Представления
- •Процедуры и функции
- •Триггеры
- •Пользователи и сессии
- •Инструментарий скачать субд
- •Инсталляция
- •Выполнение запросов
- •Использование примеров
- •Комментарий
- •Идентификаторы
- •Обзор типов данных
- •Интервал времени
- •Литералы
- •Выражения и операции
- •Cтроковые операции
- •Алгебраические операции
- •Операции отношения
- •Логические операции и предикаты
- •Условные выражения
- •Прочие операции
- •Обзор функций
- •Математические функции
- •Строковые функции
- •Работа с датами
- •Преобразование типов
- •Функции Oracle
- •Функции PostgreSql
- •Функции MySql
- •Создание таблицы
- •Значения полей по умолчанию
- •Ключи и ограничения
- •Настройка внешнего ключа
- •Создание по выборке
- •Дополнительные параметры таблицы
- •Изменение, удаление таблицы
- •Переименование таблицы или ее столбца
- •Добавление/удаление столбца
- •Первичный ключ
- •Уникальный ключ
- •Внешний ключ
- •Безошибочное удаление таблиц
- •Добавление записей
- •Значения по умолчанию
- •Подзапросы
- •Вставка по условию
- •Обновление записей
- •Обновление подзапросом
- •Обновление по данным другой таблицы
- •Удаление записей
- •Выборка записей
- •Выборка констант
- •Выборка по столбцам таблиц
- •Синонимы (алиасы)
- •Уникальные записи
- •Выборка по условию
- •Выборка по группам
- •Соединения
- •Агрегатные функции, группировка данных
- •Операции над выборками
- •Добавление итогов
- •Нумерация записей
- •Обеспечение уникальности первичного ключа
- •Столбцы с автоинкрементом
- •Индексы
- •Представления
- •Динамический sql (dsql)
- •Процедурные операторы блоковая структура кода
- •Присвоение
- •Условный оператор
- •Оператор выбора
- •Безусловный цикл
- •Цикл с предусловием
- •Цикл по счетчику
- •Цикл по элементам
- •Операторы выхода/продолжения итерации
- •Выборка в переменные
- •Хранимые процедуры
- •Вызов процедур
- •Исключения
- •Курсоры
- •Триггеры
- •Числа прописью
- •Транзакции, конкурирующие запросы
- •Управление аккаунтами пользователи
- •Права доступа
- •Права доступа MySql
- •Права доступа PostgreSql
- •Права доступа Oracle
- •Удаление прав доступа
- •Роли PostgreSql
- •Роли Oracle
- •Роли MySql
- •Файловый вывод/ввод
- •Информация о базе данных
Настройка внешнего ключа
Что произойдет, если послана команда на удаление записи в родительской таблице на которую ссылается внешний ключ? По умолчанию СУБД не позволит удалить такую запись и выведет сообщение об ошибке. Однако есть еще как минимум два возможных варианта, которые задаются при определении внешнего ключа. Первый, это установить значение внешнего ключа в 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;