Команды UPDATE и DELETE

Продолжим изучать язык SQL-запросов и поговорим об изменении и удалении записей из таблицы. Как и ранее, воспользуемся программой DB Browser и изучим работу команд:

  • UPDATE – изменение данных в записях;
  • DELETE – удаление записей из таблицы.

UPDATE

Начнем с команды UPDATE, которая имеет следующий синтаксис:

UPDATE имя_таблицы SET имя_столбца = новое_значение WHERE условие

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

UPDATE users SET score = 0

Конечно, на практике подобный SQL-запрос встречается крайне редко, т.к. он затрагивает изменение всех записей в таблице. Обычно, он записывается с весьма строгим фильтром, например, так:

UPDATE users SET score = 1000 WHERE rowid = 1

Здесь мы в качестве фильтра используем скрытый столбец rowid с уникальным значением номера для каждой записи и это гарантирует нам, что изменение затронет только одну первую запись (именно у нее в нашем случае rowid =1, однако, это не всегда так).

Или же, можно всем игрокам женского пола увеличить число очков на 500:

UPDATE users SET score = score+500 WHERE sex = 2

Смотрите, конструкция score = score+500 позволяет добавить к уже существующим данным в поле score 500 очков. Наконец, мы можем обратиться к игрокам по имени и указать им определенное число очков:

UPDATE users SET score = 1500 WHERE name LIKE 'Федор'

Здесь ключевое слово LIKE возвращает True, если поле name содержит имя «Федор». В этой строке можно использовать специальные символы:

  • % - любое продолжение строки;
  • _ - любой символ;

для создания сравнения с шаблоном. Например, так:

UPDATE users SET score = score+100 WHERE name LIKE 'М%'

Всем игрокам, у которых имя начинается с буквы «М» будет добавлено 100 очков. Или, так:

UPDATE users SET score = score+100 WHERE name LIKE 'С_рг%'

Здесь шаблон «'С_рг%» означает первую букву «С», за которой может идти произвольный символ, далее буквы р и г и, затем, произвольный набор символов. Этому выражению, в частности, соответствует имя «Сергей».

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

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

UPDATE users SET score = 700, old = 45 WHERE old > 40

DELETE

Синтаксис следующей команды для удаления записи из БД, следующий:

DELETE FROM имя_таблицы WHERE условие

Здесь все очень просто: указывается имя таблицы, из которой осуществляется удаление и, затем, условия для выбора удаляемых записей. Обычно, в качестве фильтра задается строгое условие, чтобы случайно не удалить «лишние» данные и для этого хорошо подходит скрытое поле rowid. Например, так:

DELETE FROM users WHERE rowid IN(2, 5)

Мы здесь удалили две записи с rowid 2 и 5. Если теперь отобразить нашу таблицу игроков:

SELECT rowid, * FROM users

то получим такой список:

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

INSERT INTO users VALUES('Даша', 2, 24, 1200)

И снова отобразить список:

то получим запись с rowid равным 9, так как это поле автоматически принимает следующее значение. Поэтому оно не равно порядковому номеру записи в таблице, это лишь некое уникальное числовое значение записи и не более того. Вот это всегда следует иметь в виду при работе с таблицами БД.