Mysql update сложный запрос на обновление. Запросы SQL для обновления данных (UPDATE)

Если нам нужно изменить или обновить данные в MySQL, мы можем использовать SQL команду UPDATE для работы. ,

грамматика

Ниже приводится команда UPDATE для изменения данных MySQL Sheet Data Общие SQL синтаксис:

UPDATE table_name SET field1=new-value1, field2=new-value2

  • Вы можете обновить одно или несколько полей одновременно.
  • Можно указать любое условие в предложении WHERE.
  • Можно также обновить данные в отдельной таблице.

Когда вам нужно обновить данные, указанные в строках таблицы ИНЕКЕ очень полезно.

Командной строки, чтобы обновить данные

Ниже мы будем обновлять w3big_tbl указанные в таблице данных с помощью команды SQL UPDATE ИНЕКЕ:

примеров

В следующем примере будет обновлять таблицу данных в качестве w3big_title w3big_id значения поля 3:

# mysql -u root -p password; Enter password:******* mysql> use w3big; Database changed mysql> UPDATE w3big_tbl -> SET w3big_title="Learning JAVA" -> WHERE w3big_id=3; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql>

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

PHP функция для использования mysql_query () для выполнения операторов SQL, вы можете использовать оператор UPDATE SQL или ИНЕКЕ не применяется.

Эта функция в MySQL> командной строки эффект выполнения операторов SQL то же самое.

примеров

В следующем примере будет обновлять данные w3big_id поле w3big_title 3.

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

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

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

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

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

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

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

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


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

UPDATE goods SET price = 0

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

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

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

Имеется таблица:

Для примера, нужно обновить стоимость товара с известным нам его значением 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 – формула, по которой будет вычисляться новая цена товаров. Новая цена будет записана равной старой цене поделенной на два.

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

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

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

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

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


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

Синтаксис UPDATE

Однотабличный синтаксис:
UPDATE шя_таблтш
SET имя_столбца1=выражение1 [, имя_столбца2=выражение2 ...]


Многотабличный синтаксис:

UPDATE имя_таблицы [, имя_таблицы...] SET имя_столбца 1=выражение1 [,имя_столбца2=выражение2 ...]
Оператор UPDATE обновляет столбцы существующих строк таблицы новыми значе-ниями. Конструкция SET перечисляет столбцы, подлежащие модификации, и значения, которые им присваиваются. Если указана конструкция WHERE, она задает, какие строки должны быть обновлены. В противном случае обновляются все строки таблицы. Если указана конструкция ORDER BY, строки будут обновлены в заданном порядке. Конструк-ция LIMIT накладывает ограничение на количество обновляемых строк.
Оператор UPDATE поддерживает следующие модификаторы:

  1. Если указано ключевое слово LOW_PRIORITY, выполнение UPDATE откладывается до тех пор, пока все другие клиенты завершат чтение таблицы.
  2. Если указано ключевое слово IGNORE, операция обновления не будет прервана, даже если возникнут ошибки дублирования ключа. Строки, которые приводят к конфликтам, обновлены не будут.

Если вы используете столбцы из таблицы имя_таблицы в выражениях, UPDATE исполь-зует текущее значение столбцов. Например, следующий оператор увеличивает значение столбца age на единицу:
mysql> UPDATE persondata SET age=age+l;
Присвоения в UPDATE выполняются слева направо. Например, следующий оператор удваивает значение столбца age, а затем увеличивает на единицу: mysql> UPDATE persondata SET age=age*2, age=age+l;
Если вы устанавливает значение столбца в то, которое он имеет, MySQL обнаружи-вает это и не выполняет обновление.
Если вы обновляете столбец, который была объявлен как NOT null, присваивая ему значение NULL, он устанавливается в значение по умолчанию, соответствующее конкрет-ному типу данных и увеличивает счетчик предупреждений на единицу. Значение по умолчанию равно 0 для числовых столбцов, пустая строка ("") для символьных и "нуле-вое" значение для столбцов типа даты и времени.
UPDATE возвращает количество строк, которые фактически были обновлены. В MySQL 3.22 и более поздних версиях функция mysql_info() программного интерфейса С API возвращает количество строк, которые соответствовали запросу и были обновле-ны, а также количество предупреждений, возникших во время выполнения UPDATE.
Начиная с MySQL 3.23, можно использовать limit количество_строк для ограниче-ния области действия UPDATE.
Конструкция LIMIT работает следующим образом:

  1. До MySQL 4.0.13 LIMIT была ограничением количества обработанных строк. Оператор завершал работу, как только обновлял количество_строк строк, удовлетворявших условию WHERE.
  2. Начиная с MySQL 4.0.13, limit - ограничение соответствия строк. Оператор завершает работу, как только найдет количество_строк строк, удовлетворяющих условию WHERE, независимо от того, были ли они действительно обновлены.

Если оператор UPDATE включает конструкцию order by, то строки обновляются в по-рядке, заданном этой конструкцией. ORDER BY может применяться, начиная с MySQL 4.0.0.
Начиная с MySQL 4.0.0, также можно выполнять операции UPDATE, которые работают с несколькими таблицами сразу:
UPDATE items,month SET items.price=month.price WHERE items.id-month. id/ Этот пример демонстрирует внутреннее объединение, использующее оператор запя-той, но многотабличные UPDATE могут использовать любой тип объединений, допусти-мый в операторе SELECT, например, LEFT JOIN.
На заметку!

  • Вы не можете применять ORDER BY или LIMIT в многотабличных операторах UPDATE.
До версии MySQL 4.0.18 необходимо было иметь привилегию UPDATE для всех таб-лиц, используемых в многотабличном UPDATE, даже если они фактически не обновля-лись. Начиная с MySQL 4.0.18, для таких таблиц, чьи столбцы только читаются, но не обновляются, необходимо иметь только привилегию SELECT.
Если вы используете многотабличный оператор UPDATE в отношении таблиц InnoDB, у которых определены ограничения внешних ключей, оптимизатор MySQL может обраба-тывать их в порядке, отличном от того, который задается их отношениями "родитель-ский-дочерний". В этом случае оператор завершится ошибкой и будет выполнен откат транзакции. Вместо этого обновляйте одну таблицу и полагайтесь на свойство ON UPDATE, которое предоставляет механизм InnoDB для автоматического обновления связанных таблиц.

This MySQL tutorial explains how to use the MySQL UPDATE statement with syntax and examples.

Syntax

In its simplest form, the syntax for the UPDATE statement when updating one table in MySQL is:

UPDATE table SET column1 = expression1, column2 = expression2, ... ;

However, the full syntax for the MySQL UPDATE statement when updating one table is:

UPDATE [ LOW_PRIORITY ] [ IGNORE ] table SET column1 = expression1, column2 = expression2, ... ] ;

The syntax for the UPDATE statement when updating one table with data from another table in MySQL is:

UPDATE table1 SET column1 = (SELECT expression1 FROM table2 WHERE conditions) ;

The syntax for the MySQL UPDATE statement when updating multiple tables is:

UPDATE table1, table2, ... SET column1 = expression1, column2 = expression2, ... WHERE table1.column = table2.column AND conditions;

Parameters or Arguments

LOW_PRIORITY Optional. If LOW_PRIORITY is provided, the update will be delayed until there are no processes reading from the table . LOW_PRIORITY may be used with MyISAM, MEMORY and MERGE tables that use table-level locking. IGNORE Optional. If IGNORE is provided, all errors encountered during the update are ignored. If an update on a row would result in a violation of a primary key or unique index, the update on that row is not performed. column1, column2 The columns that you wish to update. expression1, expression2 The new values to assign to the column1 , column2 . So column1 expression1 , column2 would be assigned the value of expression2 , and so on. WHERE conditions Optional. The conditions that must be met for the update to execute. ORDER BY expression Optional. It may be used in combination with LIMIT to sort the records appropriately when limiting the number of records to be updated. LIMIT number_rows Optional. If LIMIT is provided, it controls the maximum number of records to update in the table. At most, the number of records specified by number_rows will be update in the table.

Example - Update single column

Let"s look at a very simple MySQL UPDATE query example.

UPDATE customers SET last_name = "Anderson" WHERE customer_id = 5000;

This MySQL UPDATE example would update the last_name to "Anderson" in the customers table where the customer_id is 5000.

Example - Update multiple columns

Let"s look at a MySQL UPDATE example where you might want to update more than one column with a single UPDATE statement.

UPDATE customers SET state = "California", customer_rep = 32 WHERE customer_id > 100;

When you wish to update multiple columns, you can do this by separating the column/value pairs with commas.

state to "California" and the customer_rep to 32 where the customer_id is greater than 100.

Example - Update table with data from another table

Let"s look at an UPDATE example that shows how to update a table with data from another table in MySQL.

UPDATE customers
SET city = (SELECT city
FROM suppliers
WHERE suppliers.supplier_name = customers.customer_name)
WHERE customer_id > 2000;

This UPDATE example would update only the customers table for all records where the customer_id is greater than 2000. When the supplier_name from the suppliers table matches the customer_name from the customers table, the city from the suppliers table would be copied to the city field in the customers table.

Example - Update multiple Tables

Let"s look at a MySQL UPDATE example where you might want to perform an update that involves more than one table in a single UPDATE statement.

UPDATE customers, suppliers SET customers.city = suppliers.city WHERE customers.customer_id = suppliers.supplier_id;

This MySQL UPDATE statement example would update the city field in the customers table to the city from the suppliers table where the customer_id matches the supplier_id .