
- •Введение
- •Прочие команды
- •Структура базы данных
- •Ключи, ограничения
- •Индексы
- •Представления
- •Процедуры и функции
- •Триггеры
- •Пользователи и сессии
- •Инструментарий скачать субд
- •Инсталляция
- •Выполнение запросов
- •Использование примеров
- •Комментарий
- •Идентификаторы
- •Обзор типов данных
- •Интервал времени
- •Литералы
- •Выражения и операции
- •Cтроковые операции
- •Алгебраические операции
- •Операции отношения
- •Логические операции и предикаты
- •Условные выражения
- •Прочие операции
- •Обзор функций
- •Математические функции
- •Строковые функции
- •Работа с датами
- •Преобразование типов
- •Функции Oracle
- •Функции PostgreSql
- •Функции MySql
- •Создание таблицы
- •Значения полей по умолчанию
- •Ключи и ограничения
- •Настройка внешнего ключа
- •Создание по выборке
- •Дополнительные параметры таблицы
- •Изменение, удаление таблицы
- •Переименование таблицы или ее столбца
- •Добавление/удаление столбца
- •Первичный ключ
- •Уникальный ключ
- •Внешний ключ
- •Безошибочное удаление таблиц
- •Добавление записей
- •Значения по умолчанию
- •Подзапросы
- •Вставка по условию
- •Обновление записей
- •Обновление подзапросом
- •Обновление по данным другой таблицы
- •Удаление записей
- •Выборка записей
- •Выборка констант
- •Выборка по столбцам таблиц
- •Синонимы (алиасы)
- •Уникальные записи
- •Выборка по условию
- •Выборка по группам
- •Соединения
- •Агрегатные функции, группировка данных
- •Операции над выборками
- •Добавление итогов
- •Нумерация записей
- •Обеспечение уникальности первичного ключа
- •Столбцы с автоинкрементом
- •Индексы
- •Представления
- •Динамический sql (dsql)
- •Процедурные операторы блоковая структура кода
- •Присвоение
- •Условный оператор
- •Оператор выбора
- •Безусловный цикл
- •Цикл с предусловием
- •Цикл по счетчику
- •Цикл по элементам
- •Операторы выхода/продолжения итерации
- •Выборка в переменные
- •Хранимые процедуры
- •Вызов процедур
- •Исключения
- •Курсоры
- •Триггеры
- •Числа прописью
- •Транзакции, конкурирующие запросы
- •Управление аккаунтами пользователи
- •Права доступа
- •Права доступа MySql
- •Права доступа PostgreSql
- •Права доступа Oracle
- •Удаление прав доступа
- •Роли PostgreSql
- •Роли Oracle
- •Роли MySql
- •Файловый вывод/ввод
- •Информация о базе данных
Внешний ключ
MySQL автоматически создает одноименный индекс для внешнего ключа, но при удалении ключа индекс не удаляет.
-- добавление
ALTER TABLE tblname
ADD CONSTRAINT fk_tblname2 FOREIGN KEY(num1)
REFERENCES tb (id);
-- удаление
ALTER TABLE tblname DROP CONSTRAINT fk_tblname2;
-- удаление для MySQL
ALTER TABLE tblname DROP FOREIGN KEY fk_tblname2;
ALTER TABLE tblname DROP INDEX fk_tblname2;
Ниже приведен пример добавление удаление ограничения на значение.
ALTER TABLE tblname -- добавление
ADD CONSTRAINT chk_tblname1 CHECK (num>10);
-- удаление, не для MySQL
ALTER TABLE tblname
DROP CONSTRAINT chk_tblname1;
Для уничтожения таблицы служит команда DROP TABLE.
-- если уверены в уничтожении таблицы
DROP TABLE tblname;
Безошибочное удаление таблиц
В приведенном выше примере, если уничтожаемая таблица не существует, то появится сообщение об ошибке. Некоторые СУБД поддерживают расширенный синтаксис, позволяющий избежать данную ошибку. Обычно это используется в скриптах, где перед созданием новой таблицы на всякий случай уничтожают таблицу с таким же именем.
-- если таблица есть, она уничтожится,
-- иначе ничего не произойдет
DROP TABLE IF EXISTS tblname;
Добавление записей
Для добавления записей в таблицу используется команда INSERT INTO. Пусть существует следующая таблица.
CREATE TABLE tblname (
id integer default 0,
num double precision default 3.14,
CONSTRAINT pk_tblname PRIMARY KEY (id)
);
Ниже приведен запрос на добавление записи в эту таблицу с использованием полного синтаксиса. Для применения внесенных изменений дополнительно необходимо послать команду commit. Возможно, в используемой вами программе есть опция включения/выключения автоматической посылки этой команды, или запуск этой команды выведено на видное место в пользовательском интерфейсе. В последующих примерах эта команда будет опущена.
-- вставка записи
insert into tblname(id,num) values(2,2.9);
-- применяем внесенные в БД изменения
commit;
-- вывод всех данных таблицы для проверки
select * from tblname;
Если задаются значения всех столбцов, то их не обязательно перечислять после имени таблицы.
INSERT INTO tblname VALUES(5,2.9);
Значения по умолчанию
Если для новой записи в качестве значения поля достаточно значения по умолчанию, то его можно не указывать в списке столбцов, либо в качестве значения указать default.
-- не указываем поле num в списке столбцов
INSERT INTO tblname(id) VALUES(3);
-- используем default
INSERT INTO tblname(id,num) VALUES(4,DEFAULT);
-- если бы определение столбца в MySQL было бы таким
-- id integer default 0 AUTO_INCREMENT,
-- или мы написали тригер генерирующий
-- значения первичного ключа в Oracle
INSERT INTO tblname(num) VALUES(DEFAULT);
-- короткая запись предыдущей команды для MySQL
INSERT INTO tblname VALUES();
Подзапросы
В качестве значений можно использовать подзапрос. Как и в предыдущих примерах, число столбцов в выборке должно соответствовать перечислению столбцов в команде insert into.
-- число столбцов в выборке соответствует
-- числу столбцов в таблице
INSERT INTO tblname SELECT ...
-- в выборке должен быть один столбец
INSERT INTO tblname(id) SELECT ...