Изучаем sql


INSERT INTO branch_usage (branch_id, cust_id, last_visited_on)



Pdf көрінісі
бет234/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   230   231   232   233   234   235   236   237   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )

INSERT INTO branch_usage (branch_id, cust_id, last_visited_on)
> VALUES (1, 5, CURRENT_TIMESTAMP( ));
Query OK, 1 row affected (0.02 sec)


266
Приложение B
Однако при следующем посещении клиентом того же отделения потре
буется 
обновить 
существующую запись, а не вставлять новую. В про
тивном случае будет получена следующая ошибка:
ERROR 1062 (23000): Duplicate entry '15' for key 1
Чтобы избежать этой ошибки, можно запросить таблицу 
branch_usage
и посмотреть, имеется ли данная пара значений клиент/отделение,
а затем уже вставить запись, если таковой не найдено, или обновить
имеющуюся строку, если она уже существует. Однако чтобы избавить
пользователей от хлопот, разработчики MySQL расширили выраже
ние 
insert
и обеспечили возможность определять необходимость изме
нения одного или нескольких столбцов, если выражение 
insert
дает
сбой изза дублирования ключей. Следующее выражение предписыва
ет серверу изменять столбец 
last_visited_on
, если данные клиент и от
деление уже есть в таблице 
branch_usage
:
mysql> 
INSERT INTO branch_usage (branch_id, cust_id, last_visited_on)
> VALUES (1, 5, CURRENT_TIMESTAMP( ))
> ON DUPLICATE KEY UPDATE last_visited_on = CURRENT_TIMESTAMP( );
Query OK, 2 rows affected (0.02 sec)
Блок 
on
duplicate
key
(при дублировании ключа) позволяет выполнять
одно и то же выражение при каждом появлении клиента с ID 5 в отде
лении с ID 1. Если выражение выполняется 100 раз, в результате пер
вого прогона в таблицу добавляется одна строка. Следующие 99 выпол
нений обеспечивают изменение столбца 
last_visited_on
соответственно
Замещение команды replace
До версии 4.1 сервера MySQL операции с возможностью обновле
ния и вставки осуществлялись с помощью команды 
replace
(за
местить). Это собственное выражение, которое сначала удаляет
существующую строку, если такое значение первичного ключа
уже существует, а потом уже вставляет новую строку в таблицу.
Выполняя операции с возможностью обновления и вставки при
работе с версией 4.1 и более поздними, можно выбирать между
командами 
replace
и 
insert...on duplicate key
.
Однако команда 
replace
выполняет операцию удаления при
встрече дублирующихся значений ключей, что может обусло
вить цепную реакцию, если используется механизм хранения
InnoDB и наложены ограничения внешнего ключа. Если ограни
чения созданы посредством опции 
on
delete
cascade
, при удале
нии строки целевой таблицы команда 
replace
может автоматиче
ски удалить и строки других таблиц. Поэтому обычно более без
опасным считается использование блока 
on
duplicate
key
выраже
ния 
insert
, а не более старой команды 
replace
.


MySQLCрасширения языка SQL
267
текущему времени. Такой тип операций часто называют 
операциями
с возможностью обновления и вставки 
(
upsert
), т. е. сочетанием выра
жений 
update
и 
insert
.


Достарыңызбен бөлісу:
1   ...   230   231   232   233   234   235   236   237   ...   261




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет