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

Внешний ключ

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 ...