No Image

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

СОДЕРЖАНИЕ
0 просмотров
22 января 2020

Изучаем SQL

  • 1. Введение в SQL
  • 2. Запросы на выборку
  • 3. Условия в запросах
  • 4. Cортировка данных
  • 5. Вставка записи
  • 6. Вставка нескольких записей
  • 7. Изменение записи

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

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

UPDATE таблица SET поле = значение

Здесь, UPDATE – команда указывающая, что запрос на обновление данных;

таблица – название таблицы, в которой будет проводиться изменения;

SET – команда, после которой через запятую указываются поля с назначаемыми им значениями;

поле – поле таблицы, в которое будет внесено изменение;

значение – новое значение, которое будет внесено в поле.

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

UPDATE goods SET price = 0

В этом случае, поле price абсолютно во всех имеющиеся строках таблицы примет значение 0.

Изменение одного значения

Изменение значения всех полей в таблице необходимо крайне редко. Чаще всего необходимо поменять значение какой-то конкретной записи. Для этого в завершении строки с командой UPDATE будет добавлена директива WHERE, в которой указывается условие, определяющее с какой именно строкой нужно выполнить операцию обновления.

num
(номер товара)
title
(название)
price
(цена)
1 Чайник 300
2 Чашка 100
3 Ложка 25
4 Тарелка 100

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

UPDATE goods SET price = 150 WHERE num = 2

Теперь, перед операцией изменения полей, будет выбрана строка, удовлетворяющая условию num = 2. Такая строка в таблице одна. В этой стоке цена и будет изменена на значение 150. В результате получим таблицу с измененной ценой товара.

Внесение изменений в несколько строк с условием отбора

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

Например, мы хотим уменьшить в два раза цену всех товаров, которые сейчас стоят от 100 и более. Запрос:

UPDATE goods SET price = price / 2 WHERE price >= 100

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

price = price / 2 – формула, по которой будет вычисляться новая цена товаров. Новая цена будет записана равной старой цене поделенной на два.

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

num
(номер товара)
title
(название)
price
(цена)
1 Чайник 150
2 Чашка 50
3 Ложка 25
4 Тарелка 50

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

При необходимости обновлять сразу несколько полей, все поля с их значениями указываются после директивы SET через запятую. Например, нужно изменить название и цену товара с кодом 2 на «утюг», стоимостью 300:

UPDATE goods SET title = "утюг" , price = 300 WHERE num = 2

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

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

Еще материалы из этого раздела

Комментарии

Добрый день!
А можно ли сделать так:
UPDATE goods SET title, price = 100 WHERE num = 2

То есть присвоить двум полям одно значение?

Добрый день, Анастасия.
Простейший вариант:
UPDATE goods SET price = (RAND() * 100) WHERE num = 2

Здесь назначается случайное число до 100, так как функция RAND() вернет дробное от 0 до 1. Поэтому еще стоит обратить внимание на тип поля, когда в БД запись заносится. В данном случае, без округления, вещественное может быть записано.

Добрый день, Василий.
Одна строка таблицы – это одна запись. Если вы хотите исправить в одной записи таблице (строке таблицы), то так и будет:
UPDATE goods SET title = "утюг", price = 300 WHERE num = 2

title = "утюг", price = 300 – для каждого столбца строки.

Добрый день, Василий.

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

Подобное решение, как мне кажется применимо, например, в обновлении прайс-листа. Но, т.к. задача не часто выполнимая, то нет смысла усложнять ее, пусть даже для повышения скорости выполнения. Хотя все зависит от конкретных условий.

Надеюсь, я ответил на ваш вопрос, Василий.

Есть простая таблица в sql. И по нажатию на кнопку сохранить выполняется сохранение изменений. Запрос такой:
$query = "UPDATE `comp` SET `comp_login`= ‘$comp_login’, `comp_name` = ‘$comp_name’, `see` = ‘$see’, `p_status` = ‘$p_status’, `comp_text` = ‘$comp_text’ WHERE ` ";
Значения переменных берутся с пост запроса. Примерно такие: $comp_login = mysql_real_escape_string($request[‘comp_login’]);

Вопрос: Мне нужно знать была ли обновлена строка. Даже если ничего не было изменено, то тоже нужно вернуть истину.
Если проверить так: if(mysql_affected_rows() >0) , то возвращается ложь, если ничего не было изменено.

А if(mysql_affected_rows() == -1) выполняется только, если есть конкретные ошибки. Т.е. в таблице есть стpока enum со значениями ‘0’,’1′. Если я в это поле отправляю текст, то ставит 0 и пишет нет ошибки.

Читайте также:  Совместимость hdmi и displayport

Как обычно проверяют такие условия?

А можете ли помочь с таким вопросом:
Есть сайт технической поддержки. И есть пользователи, которые оставляют на нем заявку в компанию. На нем есть таблица с полями: id_client(id пользователя AI, PK), name_client(Имя потльзователя), status(один ко многим), date_r(дата регистрации).

Статусы у всех пользователей будут разные. Например:
у пользователя 1: открыто, отменено, закрыто, передано, принято.
у пользователя 2: открыто, отменено, закрыто, исполнено, в ожидании.
у каждого клиента должны быть видны несколько статусов для выбора (только ему принадлежащие), а у другого клиента (другие статусы, принадлежащие именно ко второму клиенту)

Статусы в любое время могут добавляться( не удаляются).
Я пока придумал только так:
1. вариант:
Вторая таблица такая: id_status, id_client, open, close, cancelled, sent, accepted.
id_status – AI PK, id_client – указывает на первую таблицу на пользователя, другие поля сами статусы и имеют значение enum: ‘0’, ‘1’ – в зависимости присутствует для пользователя ставиться 0 или 1.

Когда необходимо добавлять статус какому либо клиенту сначала ставлю 1 для нужного пользователя, а для всех других проставляю 0.
2 Вариант.
Во второй таблице statuses (id_statuses, name_status) записаны все статусы. В таблице пользователя в поле status записать несколько значений id_statuses разделенных разделителями, которые принадлежат ему.

Может можно реализовать попроще?

Добрый день, Иван.
Не знаю, правильно ли я понял вопрос.
Я бы сделал гораздо больше таблиц: пользователи, статусы, заявки, статусы_заявки. Последняя в случае, если одной заявке может соответствовать несколько статусов. Если нет, то она не нужна.

Например, если нужно чтобы пользователю могло быть назначено несколько статусов, то: сама таблица пользователя (id, имя, прочее), список_статусов (id, название, . ), статусы_пользователя (id, id_пользователя, id_статуса). Таим образом у вас будет обеспечена и целостность данных и не будет в таблицах не будет избыточности.

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

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

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

В этой статье

Обзор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Тариф смарт мтс кировская область

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Между #2/2/2020 # и #12/1/2020 #

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

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

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

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

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

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

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

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

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

Поиск всех записей в течение 2 февраля 2020 г. Если в базе данных используется набор подстановочных знаков ANSI-92, заключайте дату в одинарные кавычки (‘) вместо знаков решетки (#); Например, ("2/2/2020").

Date для возврата всех дат не менее 30-дневной давности.

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

Between Date( ) And DateAdd("M", 3, Date( ))

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  1С предприятие тестирование 1с профессионал

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

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

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

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

DSum ("[количество] * [Цена]";
"Сведения о заказах", "[КодТовара] =" _Амп_ [ProductID])

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Запрос на обновление Access

Сегодня поговорим на тему «Запрос на обновление Access». Запрос на обновление Access может быть использован для обновления данных в полях базовых таблиц. Изменения вносятся в группу записей, отбираемых с помощью указанных пользователем условий отбора. Значения для изменений в полях определяются в бланке запроса в строке Обновление (Update To).
Задача. Рассчитайте стоимость товара в каждой строке таблицы ОТГРУЗКА и сохраните ее в поле СУММА_ОТГР этой же таблицы.

  1. Для формирования запроса на обновление сначала создайте запрос Выборка (Select) на основе двух таблиц: обновляемой таблицы ОТГРУЗКА и таблицы ТОВАР.
  2. Преобразуйте запрос на выборку в запрос на обновление, щелкнув на кнопке Обновление (Update), размещенной на вкладке ленты Конструктор (Design) или выбрав команду Обновление (Update) из списка Тип запроса (Query Type) в контекстном меню запроса. После выполнения этой команды в бланке запроса появляется строка Обновление (Update To) (рис. 4.43).
  3. Заполните бланк запроса. Перетащите обновляемое поле СУММА_ОТГР из списка таблицы ОТГРУЗКА в строку Поле (Field). В строку Обновление (Update To) введите выражение [ЦЕНА]*[КОЛ_ОТГР], которое рассчитывает значение для обновления.
  • Просмотрите содержимое обновляемого поля СУММА_ОТГР перед выполнением запроса, нажав кнопку Режим (View) на ленте конструктора запросов в группе Результаты (Results).
  • Для обновления содержимого поля СУММА_ОТГР выполните запрос, нажав кнопку Выполнить (Run) на вкладке ленты Конструктор (Design). Открывается диалоговое окно с сообщением о числе обновляемых записей и вопросом о продолжении операции обновления. Подтвердите обновление записей.
  • Просмотрите содержимое обновляемого поля СУММА_ОТГР после выполнения запроса. Для этого переключитесь после выполнения запроса в режим таблицы, воспользовавшись кнопкой Режим таблицы (Datasheet View) в строке состояния или нажмите кнопку Режим (View) на вкладке ленты.

  • Таким образом, рассмотренный запрос позволяет автоматизировать расчет стоимости товара, указанного в каждой строке спецификации накладной ― записи таблицы ОТГРУЗКА.

    1. Если обновлять нужно только некоторые строки таблицы, задайте условия отбора обновляемых записей. Для этого дополните бланк запроса полем, по которому требуется произвести отбор записей. Перетащите поле КОД_ТОВ в бланк запроса и введите в строку Условия отбора (Criteria) параметр [Введите код товара] (см. рис. 4.43).
    2. Выполните запрос. Обновление будет выполнено только для записей с введенным кодом товара.
    3. Сохраните запрос под именем Расчет стоимости.
    4. Перейдите в режим SQL. Эквивалентная запросу на обновление инструкция UPDATE будет записана следующим образом:
      UPDATE ТОВАР INNER JOIN ОТГРУЗКА ON ТОВАР.КОД_ТОВ = ОТГРУЗКА.КОД_ТОВ
      SET ОТГРУЗКА.СУММА_ОТГР = [ЦЕНА]*[КОЛ_ОТГР] WHERE (((ТОВАР.КОД_ТОВ)=[Введите код товара]));

    Имена таблиц, используемых в запросе, и способ их объединения задаются не-посредственно за именем инструкции UPDATE. Инструкция UPDATE обновляет указанное в предложении SET поле ОТГРУЗКА.СУММА_ОТГР, присваивая значение, за-данное выражением [ЦЕНА]*[КОЛ_ОТГР]. Обновление происходит во всех записях, которые удовлетворяют условию отбора, заданному в предложении WHERE.
    Для закрепления смотрим видеоурок:

    Комментировать
    0 просмотров
    Комментариев нет, будьте первым кто его оставит

    Это интересно
    Adblock detector