8 что такое запрос на обновление записей
Перейти к содержимому

8 что такое запрос на обновление записей

8 что такое запрос на обновление записей

С помощью запроса на обновление в базах данных Access можно добавлять, изменять и удалять данные в существующих записях. Запросы на обновление можно рассматривать как разновидность диалогового окна Поиск и замена с более широкими возможностями. Запрос на обновление нельзя использовать для добавления новых записей в базу данных или их удаления из нее.

Для добавления новых записей используется запрос на добавление, для удаления записей — запрос на удаление.

В этой статье

Обзор

Ниже представлены сходства и различия между функцией «Поиск и замена» и запросом на обновление

Как и в диалоговом окне Поиск и замена, в запросе на обновление можно указать значение, которое требуется заменить, а также новое значение.

В отличие от функции Поиск и замена запрос на обновление позволяет:

использовать условия, которые не зависят от заменяемого значения;

обновлять несколько записей за раз;

изменять записи в нескольких таблицах одновременно.

Ограничения обновления полей

Запрос на обновление нельзя использовать для обновления данных в полях указанных ниже типов.

Вычисляемые поля. Значения вычисляемых полей не хранятся в таблице постоянно. После вычисления они существуют только во временной памяти компьютера. Поскольку для вычисляемых полей не предусмотрено место постоянного хранения, их невозможно обновить.

Поля итогового или перекрестного запроса. Значения в запросах этих типов рассчитываются, поэтому их нельзя обновить с помощью запроса на обновление.

Поля с типом данных «Счетчик». Значения в полях с типом данных «Счетчик» изменяются только при добавлении записи в таблицу.

Поля в запросах с уникальными значениями и в запросах уникальных записей Значения в таких запросах суммарные. Некоторые значения представляют одну запись, а другие — несколько записей. Операция обновления не может быть, так как невозможно определить, какие записи были исключены как дубликаты, и поэтому обновить все необходимые записи невозможно. Это ограничение действует независимо от того, используете ли вы запрос на обновление или пытаетесь обновить данные вручную, вводя значения в форму или таблицу.

Поля в запросе на объединение Данные из полей в запросе на объединение невозможно обновить, так как каждая запись, которая отображается в двух или более источниках данных, отображается в результатах запроса на объединение только один раз. Так как некоторые повторяющиеся записи удаляются из результатов, Access не может обновить все необходимые записи.

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

Примечание: При каскадном обновлении Access автоматически обновляет значения внешнего ключа при изменении значения первичного ключа в родительской таблице.

Использование запроса на обновление

Чтобы создать запрос на обновление, рекомендуется выполнить следующее: создать запрос на выборку для определения записей, которые требуется обновить, а затем преобразовать его в запрос на обновление и обновить записи. Такая последовательность позволяет убедиться, что вы обновляете именно нужные записи.

Совет: Перед выполнением запроса на обновление рекомендуется создать резервную копию базы данных. Результаты данного запроса нельзя отменить, а созданная резервная копия позволит вам восстановить данные в случае необходимости.

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

Откройте вкладку Файл и выберите команду Сохранить как. Обратите внимание: если вы используете Access 2010, откройте вкладку Файл и выберите команду Сохранить и опубликовать.

Справа в разделе Расширенная установка щелкните элемент Создать резервную копию базы данных.

В диалоговом окне Сохранение резервной копии укажите имя и расположение резервной копии и нажмите кнопку Сохранить.

Приложение Access закроет исходный файл, создаст резервную копию и снова его откроет.

Чтобы вернуться к резервной копии, закройте и переименуйте исходный файл, чтобы получить возможность использовать имя исходной версии. Назначьте резервной копии имя исходной версии и откройте переименованную резервную копию в Access.

В этом разделе

Этап 1. Создание запроса на выборку для определения обновляемых записей

Откройте базу данных, содержащую записи, которые нужно обновить.

На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

Откройте вкладку Таблицы.

Выделите одну или несколько таблиц с записями, которые требуется обновить, и нажмите кнопку Добавить, а затем — кнопку Закрыть.

Таблицы отображаются в конструкторе запросов в одном или нескольких окнах, а в них кажутся все поля каждой таблицы. На рисунке показан конструктор запросов с типичной таблицей.

1. Таблица в окне конструктора запросов

2. Бланк запроса

В окнах таблиц дважды щелкните поля, которые необходимо обновить. Выделенные поля появятся в строке Поле бланка запроса.

Для каждого столбца в бланке запроса можно добавить одно поле таблицы.

Чтобы быстро добавить все поля в таблице, дважды щелкните звездочку (*) в верхней части списка полей таблицы в окне таблицы. На рисунке показан бланк запроса со всеми добавленными полями.

Чтобы ограничить результаты запроса на основе значений полей, в бланке запроса в строке Условие введите условие, которое необходимо использовать для ограничения результатов.

Таблица примеров условий

В приведенной ниже таблице представлены некоторые примеры условий, а также результаты их применения.

Примечание: Во многих примерах этой таблицы используются подстановочные знаки, чтобы сделать запрос более гибким или эффективным.

Возвращает все числа больше 234. Чтобы найти все числа меньше 234, используйте условие < 234.

Возвращает все записи от «Новосибирск» до конца алфавита.

Between #2.02.2020# And #12.01.2020 #

Выбирает даты между 2-фев-17 и 1-дек-17 (ANSI-89). Если в базе данных применяется набор подстановочных знаков ANSI-92, используйте вместо знаков решетки (#) одинарные кавычки (). Пример: Between ‘02.02.2020’ And ‘01.12.2020’.

Находит все записи, в которых содержимое поля не соответствует значению «Германия». Согласно этому условию будут найдены записи, содержащие дополнительный текст, кроме слова «Германия», например «Германия (евро)» или «Европа (Германия)».

Находит все записи кроме тех, которые начинаются с буквы «Т». Если в базе данных применяются подстановочные знаки ANSI-92, используйте знак процента (%) вместо звездочки (*).

Находит все записи, которые не оканчиваются буквой «т». Если в базе данных применяются подстановочные знаки ANSI-92, используйте знак процента (%) вместо звездочки (*).

Находит все записи в списке со словами «Канада» или «Великобритания».

В текстовом поле выполняется поиск всех записей, которые начинаются на одну из первых четырех букв алфавита (А-Г). Если в базе данных применяются подстановочные знаки ANSI-92, используйте знак процента (%) вместо звездочки (*).

Находит все записи, которые содержат сочетание букв «тр». Если в базе данных применяются подстановочные знаки ANSI-92, используйте знак процента (%) вместо звездочки (*).

Like «Григорий Верны?»

Находит все записи, начинающиеся с имени «Григорий» и содержащие вторую строку из 9 букв, из которых 6 букв составляют начало фамилии «Верный», а последняя буква неизвестна. Если в базе данных применяется набор подстановочных знаков ANSI-92, используйте вместо вопросительного знака (?) знак подчеркивания (_).

Находит все записи за 2 февраля 2020 г. Если в базе данных используется набор подстрокных знаков ANSI-92, окружите дату одинарными кавычками (‘) вместо знаков фунта (#); например: ‘02.02.2020’).

Использует функцию Date для возврата всех дат не менее 30-дневной давности.

Использует функцию Date для возврата всех записей, содержащих текущую дату.

Between Date( ) And DateAdd(«M», 3, Date( ))

Использует функции Date и DateAdd для возврата всех записей между текущей датой и датой на три месяца позже.

Возвращает все записи, содержащие пустое (незаполненное или неопределенное) значение.

Возвращает все записи, содержащие непустое значение.

Возвращает все записи, содержащие строку нулевой длины. Такие строки обычно используются, когда поле обязательно должно иметь значение, но это значение еще неизвестно. Например, в поле требуется ввести номер факса, но у некоторых клиентов его нет. В этом случае вместо номера можно ввести пару двойных кавычка без пробела между ними(«).

На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

Убедитесь, что запрос возвращает те записи, которые следует обновить.

Чтобы удалить поля, которые не нужно включать в конструктор запросов, выделите их и нажмите клавишу DELETE.

Чтобы добавить поля в конструктор запросов, перетащите их в бланк запросов.

Этап 2. Обновление записей

На вкладке Конструктор в группе Тип запроса нажмите кнопку Обновить.

В описанной здесь процедуре показано, как преобразовать запрос на выборку в запрос на обновление. При такой операции Access добавляет строку Обновление в бланк запроса. На приведенном ниже рисунке показан запрос на обновление, возвращающий все активы компании, приобретенные после 5 января 2005 г., и изменяющий расположение на «Склад 3» для всех записей, соответствующих этому условию.

Выберите поле с данными, которые следует изменить, и введите выражение (условие изменения) в строке Обновление для этого поля.

В строке Обновление можно использовать любое допустимое выражение.

Таблица примеров выражений

В приведенной ниже таблице представлены примеры выражений и соответствующие им результаты изменения данных.

В поле типа «Текстовый» заменяет текстовое значение строкой «Продавец».

В поле «Дата/время» изменяет значение даты на «10-авг-20».

В поле типа «Да/Нет» изменяет значение Нет на Да.

Добавляет буквы «PN» к началу каждого указанного инвентарного номера.

Перемножает значения полей с именами «Цена» и «Количество».

Увеличивает значения в поле «СтоимостьДоставки» на 50 процентов.

DSum(«[Quantity] * [UnitPrice]»,
«Сведения о заказе», «[ProductID] КодТовара» в текущей таблице совпадает со значением поля «КодТовара» в таблице «Заказано», данное выражение обновляет итоговые значения продаж, рассчитывая их как произведение значений в полях «Цена» и «Количество». Выражение использует функцию DSum, так как она может выполнять операции с несколькими таблицами и полями таблиц.

Обрезает (удаляет) левые символы в текстовой или числовой строке, оставляя пять правых символов.

IIf(IsNull([Цена]), 0, [Цена])

Заменяет пустое (неизвестное или неопределенное) значение нулем (0) в поле с именем «Цена».

На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

Появится предупреждающее сообщение.

Для выполнения запроса и обновления данных нажмите кнопку Да.

Примечание: После выполнения запроса можно заметить, что в его результатах отсутствуют некоторые поля. Если запрос содержит поля, которые не обновлялись, по умолчанию эти поля не отображаются в результатах. Предположим, что были включены поля «Код» из двух таблиц, чтобы убедиться, что запрос идентифицирует и обновляет нужные записи. Если эти поля не обновлялись, то в приложении Access они не отображаются в результатах.

Обновление данных в одной таблице данными из другой таблицы

При обновлении данных в одной таблице данными из другой необходимо соблюдать основное правило: типы данных исходного и целевого полей должны совпадать или быть совместимыми.

Кроме того, при обновлении данных в одной таблице данными из другой и использовании совместимых типов данных вместо совпадающих приложение Access преобразует типы данных этих полей в целевой таблице. В результате некоторые данные в целевых полях могут обрезаться (удаляться). В разделе Ограничения преобразования типов данных указаны случаи, когда можно или нельзя выполнять преобразование типов данных. Также в этом разделе приведена таблица, демонстрирующая, когда преобразование типа данных может привести к изменению или удалению всех либо некоторых данных в поле, а также какие данные могут удаляться.

Процесс обновления данных в одной таблице данными из другой включает основные этапы, указанные ниже.

Создание запроса на обновление и добавление в него исходной и целевой таблиц.

Объединение этих таблиц по полям, содержащим связанные сведения.

Добавление имен целевых полей в строку Поле бланка запроса.

Добавление имен исходных полей в строку Обновление бланка запроса с использованием следующего синтаксиса: [исходная_таблица].[исходное_поле].

Действия, описанные в данном разделе, предполагают, что используются две похожих таблицы. В этом примере таблица «Клиенты» располагается в унаследованной базе данных и содержит более свежие данные, чем таблица «Заказчики». Несколько имен менеджеров и адресов были изменены. Поэтому было принято решение обновить таблицу «Заказчики» данными из таблицы «Клиенты».

Создание запросов на обновление таблиц

Запросы на обновление используются главным образом для того, чтобы внести изменения сразу в большое количество записей с помощью одного запроса. Классическим примером такого запроса является изменение цены в таблице "Товары" (Products) на некоторый постоянный коэффициент, например можно увеличить цену одной из категорий товара на 20%. Чтобы создать такой запрос:

  1. Раскройте список таблиц, щелкнув мышью по ярлыку Таблицы (Tables) окна базы данных.
  2. Выделите таблицу "Товары" (Products). Щелкните левой кнопкой мыши по стрелке на кнопке Новый объект (New Object) на панели инструментов и выберите из списка значение Запрос (Query). Появится окно Конструктора запросов с таблицей "Товары" в верхней части. Перенесите в бланк запроса поля "Цена" и "КодТипа".
  3. Введите условие отбора записей: например, в столбец "КодТипа" введите значение 1.
  4. Выполните запрос, чтобы убедиться, что отбираются все записи, содержащие напитки.
  5. Теперь изменим запрос, превратив его в запрос на обновление. Для этого выполните команду меню Запрос, Обновление (Query, Update). Изменяется заголовок запроса и появляется дополнительная строка Обновление (Update To). При этом исчезают строки Сортировка (Sort) и Вывод на экран (Show) (рис. 8.8).
  6. Теперь нужно в строку Обновление (Update To) ввести выражение, по которому будет вычисляться новая цена: [Цена]* 0, 2. В других случаях можно вводить константу, например, если нужно поменять дату во многих записях на текущую.
  7. Теперь можно выполнить запрос. Для этого нажмите кнопку Запуск (Run) на панели инструментов. Так же, как и при добавлении записей в таблицу, Access выдаёт сообщение о количестве обновляемых записей и запрашивает подтверждение на обновление. Вы можете подтвердить обновление записей или отвергнуть.

Рис. 8.8. Запрос на обновление записей

Прежде чем выполнять запрос на обновление, щелкните левой кнопкой мыши по стрелке на кнопке Вид (View) и выберите Режим таблицы (Datasheet View). Вы увидите все записи, которые будут обновлены, хотя данные в обновляемых полях будут еще старые. И только убедившись, что отобраны нужные записи, можно выполнять запрос.

В приведенном примере изменялись значения в поле, которое не является первичным ключом в таблице "Товары" (Products). Особый случай возникает, когда требуется обновить значение первичного ключа в таблице. Если эта таблица связана отношением "один-ко-многим" с другими таблицами, то при изменении первичного ключа записи должны одновременно измениться значения внешних ключей во всех связанных записях подчиненных таблиц. Access обеспечивает выполнение такого изменения автоматически, т. к. поддерживает каскадное обновление записей. При определении связи между таблицами можно установить флажок каскадное обновление связанных полей (Cascade Update Related Fields).

Если такой флажок установлен, то при изменении значения первичного ключа в главной таблице Access автоматически выполняет специальный запрос, с помощью которого обновляются внешние ключи всех связанных записей в подчиненной таблице.

Убедиться в том, как работает такой запрос, можно на примере таблиц "Сотрудники" (Employees) и "Заказы" (Orders). Для этого нам придется сначала сделать копии этих таблиц и установить связь между ними:

UPDATE. Редактирование записей в таблице базы данных MySQL

Часто возникает необходимость изменения информации, хранящейся в базе данных. С помощью команды UPDATE вы сможете обновлять данные одной или нескольких колонок в каждой записи таблицы.

Синтаксис запроса на обновление данных.

Для примера заполним таблицу books для хранения книг из условной базы данных Bookstore, которую мы создали в одном из предыдущех постов.

Сначала выберем базу данных, для которой будем выполнять запросы.

Посмотрим какие данные сейчас хранятся в колонках id, title, author, price, discount, amount таблицы books для первых 5 записей.

mysql> SELECT id, title, author, price, discount, amount FROM books LIMIT 5;
+—-+—————————+——————-+———+———-+———+
| id | title | author | price | discount | amount |
+—-+—————————+——————-+———+———-+———+
| 1 | Дубровский | Александр Пушкин | 230.00 | 0 | 4 |
| 2 | Нос | Николай Гоголь | 255.20 | 0 | 7 |
| 3 | Мастер и Маргарита | Михаил Булгаков | 240.50 | 0 | 10 |
| 4 | Мёртвые души | Николай Гоголь | 173.00 | 0 | 3 |
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 | 0 | 3 |
+—-+—————————+——————-+———+———-+———+
5 rows in set (0.00 sec)

Обновим цену, процент скидки и уменьшим количество на 2 для книги с идентификатором 3.

Теперь проверим как обновились данные.

mysql> UPDATE books
-> SET price=263.00, discount=10, amount=amount-2
-> WHERE id=3;
Query OK, 1 rows affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> SELECT id, title, author, price, discount, amount FROM books LIMIT 5;
+—-+—————————+——————-+———+———-+———+
| id | title | author | price | discount | amount |
+—-+—————————+——————-+———+———-+———+
| 1 | Дубровский | Александр Пушкин | 230.00 | 0 | 4 |
| 2 | Нос | Николай Гоголь | 255.20 | 0 | 7 |
| 3 | Мастер и Маргарита | Михаил Булгаков | 263.00 | 10 | 8 |
| 4 | Мёртвые души | Николай Гоголь | 173.00 | 0 | 3 |
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 | 0 | 3 |
+—-+—————————+——————-+———+———-+———+
5 rows in set (0.00 sec)

Обновление данных для нескольких записей в MySQL

Используя команду WHERE можно задавать сразу несколько записей для обновления данных.

Попробуем добавить скидку в 5% для всех книг под авторством Николая Гоголя, а также в название книги добавим слово «(Акция)».

Запрос на обновление данных, в этом случае, будет выглядеть так:

В запросе используется функция CONCAT() , которая прибавляет к текущему значению поля title строку «(Акция)».

В результате получим следующие изменения.

mysql> UPDATE books
-> SET discount=5, title=CONCAT(title, » (Акция)» )
-> WHERE author= «Николай Гоголь» ;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0

mysql> SELECT id, title, author, price, discount, amount FROM books LIMIT 5;
+—-+—————————+———————+———+———-+———+
| id | title | author | price | discount | amount |
+—-+—————————+———————+———+———-+———+
| 1 | Дубровский | Александр Пушкин | 230.00 | 0 | 4 |
| 2 | Нос (Акция) | Николай Гоголь | 255.20 | 5 | 7 |
| 3 | Мастер и Маргарита | Михаил Булгаков | 263.00 | 10 | 8 |
| 4 | Мёртвые души (Акция) | Николай Гоголь | 173.00 | 5 | 3 |
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 | 0 | 3 |
+———+—————————+———————+———+———-+———+
5 rows in set (0.00 sec)

Будьте предельно внимательны при обновлении данных в таблицах, так как если вы вдруг забудете задать условие обновления и не напишите команду WHERE , то указанное в запросе обновление будет применено ко всем строкам в таблице!

Пример того, что может получится если не указать команду WHERE .

В результате запроса выше получим одинаковую цену и название для всех книг в таблице.

mysql> UPDATE books SET price=103.90, title= «Барышня-крестьянка» ;
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5 Changed: 5 Warnings: 0

mysql> SELECT id, title, author, price, discount FROM books LIMIT 5;
+—-+————————+———————+———+———-+
| id | title | author | price | discount |
+—-+————————+———————+———+———-+
| 1 | Барышня-крестьянка | Александр Пушкин | 103.90 | 0 |
| 2 | Барышня-крестьянка | Николай Гоголь | 103.90 | 5 |
| 3 | Барышня-крестьянка | Михаил Булгаков | 103.90 | 10 |
| 4 | Барышня-крестьянка | Николай Гоголь | 103.90 | 5 |
| 5 | Барышня-крестьянка | Фёдор Достоевский | 103.90 | 0 |
+—-+————————+———————+———+———-+
5 rows in set (0.00 sec)

Как обновить записи в таблице базы данных MySQL с помощью PHP (PDO)

Для обновления большого количества данных, гораздо удобнее будет воспользоваться HTML-формой, поля которой будут соответствовать полям таблицы из базы данных. Форму разместим в файле index.php .

Перед созданием формы мы обратимся к нашей таблице books и выведем данные, которые в ней хранятся, просто для того чтобы видеть, что содержит таблица и не редактировать ее вслепую.

Добавить комментарий

Ваш адрес email не будет опубликован.