Предыдущие части: Создаём базу данных, Установка MySQL
В предыдущей части мы создали базу данных с именем cat, и в ней создали таблицу с именем note.
Таблица пока пуста. Есть три вида операций, которые изменяют данные в таблице:
- Вставка новой записи в таблицу
- Модификация существующей записи в таблице
- Удаление записи из таблицы
Эти операции мы сегодня и рассмотрим. Зайдите, как обычно, в MySQL-консоль, запустив mysql.exe с именем пользователя и с именем базы:
mysql.exe -u root cat
Вставка
Вставка делается командой INSERT. В таблице note есть три столбца: date, title и content. Когда мы делаем вставку, то должны указать значения для всех столбцов:
insert into note values('2021-02-08 17:41:00', 'My Title', 'My Content');
Буквально это значит: "вставить в таблицу note значения(...)". Значения должны перечисляться в том же порядке, в каком объявлены столбцы таблицы. Первый – date, у него тип "дата-время", поэтому мы указываем значение в формате 'YYYY-MM-DD HH:MM:SS', то есть 'год-месяц-число часы:минуты:секунды'.
Далее идут столбцы title и content, для которых мы тоже указываем свои значения в виде строк.
Выборка
Кроме изменения данных, нам нужно их просматривать, поэтому сейчас самое время познакомиться с командой SELECT:
select * from note;
Буквально это значит: "выбрать все записи из таблицы note". У команды SELECT есть много дополнительных параметров, но на данный момент мы их рассматривать не будем. Нас интересует самая простая выборка:
Как видим, перед нами прямо-таки настоящая таблица с одной записью, которую мы только что в неё добавили.
Модификация
Чтобы изменить запись в таблице, нужно использовать команду UPDATE. Допустим, мы решили поправить дату:
update note set date='2021-02-08 18:00:00';
Это буквально значит: "обновить таблицу note, присвоить столбцу date значение ..."
Если нужно изменить сразу несколько столбцов, их можно перечислить через запятую:
update note set date='2021-02-08 18:00:00', title='New Title', content='New Content';
Удаление
Чтобы удалить запись из таблицы, используется команда DELETE:
delete from note;
Буквально это значит: "удалить из таблицы note".
Фильтрация запросов с помощью WHERE
Предыдущие команды UPDATE и DELETE сработали, но у нас в таблице была только одна запись. Если бы в таблице было несколько записей, то результат оказался бы несколько неожиданным. Команда UPDATE изменила бы все записи в таблице, какие есть. Команда DELETE также удалила бы все записи.
Что делать, если мы хотим изменить или удалить не все, а только какую-то конкретную запись или группу записей?
Здесь нам на помощь приходит модификатор WHERE:
delete from note where date='2021-02-08 18:00:00';
Это буквально значит: "удалить из таблицы note записи, где date=...". Таким образом, будут удалены только те записи, у которых date='2021-02-08 18:00:00'.
В модификаторе WHERE можно использовать любой столбец, который вам подходит:
delete from note where title='My Title';
Вы также можете комбинировать несколько столбцов, используя условия "И" и "ИЛИ":
delete from note where date='2021-02-08 18:00:00' and (title='My Title' or content='My Content');
Вы можете использовать не только "=", но и другие операции сравнения. Например, чтобы удалить все записи за выбранный день, можно написать:
delete from note where date >= '2021-02-08 00:00:00' and date <= '2021-02-08 23:59:59';
В общем, здесь вы уже практически пишете программный код с условными операторами.
С командой UPDATE модификатор WHERE работает абсолютно точно так же:
update note set date='2021-02-08 18:00:00' where date='2021-02-08 17:41:00';
С командой SELECT модификатор WHERE тоже работает:
select * from note where title='My Title' or date > '2021-02-08 00:00:00';
Это сделает выборку не всей таблицы, а только тех записей, которые соответствуют условию.
Проблема идентичности
Что, если в таблице оказались две абсолютно одинаковые записи? Давайте проверим таблицу note на соответствие реалиям.
Так как это наш домашний проект, то добавлять записи в таблицу будем только мы. Вряд ли мы добавим сразу две записи в одну секунду, поэтому у каждой записи поле date будет различаться хотя бы на одну секунду.
Это делает поле date уникальным в таблице. То есть мы можем использовать его в модификаторе WHERE как уникальный идентификатор записи, чтобы точно выбрать нужную нам запись.
Но всё же, если вдруг в таблицу были добавлены две записи в одну секунду, то получатся два одинаковых значения поля date. И если мы попытаемся выбрать одну запись по дате, то вместе с ней выберется и вторая запись с таким же значением.
Мы можем усилить фильтрацию, добавив проверку по полям title и content. Даже если даты совпадают, то названия и содержимое заметок должны отличаться, ведь нет смысла добавлять в таблицу две абсолютно одинаковые записи.
И тем не менее допустим, что они всё-таки добавились, и теперь мы имеем две одинаковых записи в таблице. Что делать? Если попытаемся отредактировать одну, то отредактируется и вторая. Если попытаемся удалить одну, то удалится и вторая.
К сожалению, если это уже произошло, то тут мало чем поможешь. Придётся, скорее всего, удалять обе записи, а затем создавать заново одну.
Но чтобы этого не происходило, нужно заранее спроектировать таблицу так, чтобы в ней было уникальное поле. Если дата недостаточно уникальная, значит нужно просто сделать дополнительное поле, которое точно будет уникальным. Для этого MySQL располагает широкими возможностями.
И здесь появляется слово "реляционный". MySQL это реляционная база данных. Реляция значит "отношение". И мы познакомимся с уникальными полями и отношениями в следующих выпусках.
Читайте дальше: Уникальные идентификаторы