Продолжим
изучать язык 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, так
как это поле автоматически принимает следующее значение. Поэтому оно не равно
порядковому номеру записи в таблице, это лишь некое уникальное числовое
значение записи и не более того. Вот это всегда следует иметь в виду при работе
с таблицами БД.