Изменение данных в таблицах базы данных. Инструкция UPDATE

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

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

mysql> UPDATE prestupnik SET prestupnik_name =

-> UPPER(prestupnik_name);

Query OK, 17 rows affected (0.04 sec)

Rows matched: 17 Changed: 17 Warnings: 0

Функция UPPER() представляет собой функцию MySQL, которая возвращает в верхнем регистре версию текста, переданного в качестве параметра. Например, запись Andreev Sergey Ruslanovich будет возвращена как ANDREEV SERGEY RUSLANOVICH. Имена всех преступников модифицированы, поскольку в отчете указывается о семнадцати затронутых строках. Функция LOWER() выполняет обратное преобразование всего текста в нижний регистр.

Во второй строке отчета по инструкции UPDATE указан общий эффект инструкции. В данном примере может быть следующее:

Rows matched: 17 Changed: 17 Warnings: 0

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

mysql> UPDATE prestupnik SET prestupnik_name =

-> UPPER(prestupnik_name);

Query OK, 0 rows affected (0.00 sec)

Rows matched: 17 Changed: 0 Warnings: 0

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

В нашем предыдущем примере каждое значение каждого столбца обновлялось относительно текущего значения. Столбцам можно также задать отдельное значение. Например, нам необходимо перевести всех преступников в первую преступную группи-poBKy(gruppiro vka_id= 1):

mysql> UPDATE prestupnik SETgruppirovka_id= 1;

Query OKл 17 rows affected (0.00 sec)

Rows matched: 17 Changed: 17 Warnings: 0

Обычно изменять все строки в таблице нет необходимости. Можно обновить одну или несколько строк, отвечающих заданному критерию. Как и в случае с инструкциями SELECT и DELETE, для этой задачи применяется выражение WHERE. Кроме того, можно таким же образом использовать вместе выражения ORDER BY и LIMIT для управления количеством обновляемых строк в упорядоченном списке.

Приведем пример модификации одной строки в таблице. Предположим необходимо поменять дату рождения преступника с ФИО Anisimov Vitaliy Abramovich:

mysql> UPDATE prestupnik SET

  • -> prestupnik_god_rozhdeniya = 1974
  • -> WHERE prestupnikjiame^Anisimov Vitaliy
  • -> Abramovich';

Query OK, 1 row affected (0.01 sec)

Rows matched: 1 Changed: 1 Warnings: 0

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

Для управления количеством обновлений можно использовать комбинацию выражений ORDER BY u LIMIT. Как и в случае с инструкцией DELETE, такая комбинация используется для выполнения инструкции в течение управляемого временного периода или для модификации лишь некоторых строк. Предположим, что нужно поместить 5 самых молодых преступников в третью преступную группировку. Для этого используется следующая инструкция:

mysql> UPDATE prestupnik SET gruppirovka_id=3

-> ORDER BY prestupnik_god_rozhdeniya LIMIT 5;

Query OK, 5 rows affected (0.00 sec)

Rows matched: 5 Changed: 5 Warnings: 0

Таким образом, 5 строк соответствовали условию запроса, и 5 строк были изменены.

В предыдущем запросе также был продемонстрирован важный аспект обновлений. Обновления разделены на две фазы: поиск соответствий, где определяются строки, соответствующие условию выражения WHERE; и фазу модификации, где обновляются строки, которые требуется изменить. В предыдущем примере выражение «ORDER BY prestupnik_god_rozhdeniya» использовалось в фазе поиска соответствия для сортировки данных после их считывания из таблицы. В фазе модификации затем было обработано 5 строк с обновлением тех из них, которые требовалось изменить. Начиная с версии MySQL 4.0.13, выражение LIMIT управляет максимальным числом строк соответствия. До этого выражение LIMIT управляло максимальным количеством изменяемых строк. Новая реализация имеет больше преимуществ. В старой версии приходилось ждать окончания обработки обновлений множества строк, соответствующих заданному критерию, при необходимости изменить лишь некоторых из них.

Контрольные вопросы

  • 1. Какой оператор языка SQL позволяет добавлять записи в таблицы?
  • 2. Какой оператор языка SQL позволяет удалять записи из таблицы?
  • 3. Какой оператор языка SQL позволяет изменять записи в таблицах?
  • 4. Какова структура классического запроса на добавление одной строки?
  • 5. Какова структура альтернативного запроса на добавление одной строки?
  • 6. Какова структура запроса на добавление нескольких строк?
  • 7. Какова структура запроса на удаление строк из таблицы?
  • 8. Какова структура запроса на изменение данных в полях таблицы?
  • 9. Каково назначение функций APPER и LOWER?
 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >