Основным инструментом для работы с базой данных является язык SQL, диалекты которого отличаются в зависимости от его реализации в конкретных серверах баз данных. На примере сервера баз данных MySQL рассмотрим, какие команды SQL будут нам полезны для изменения информации в таблицах баз данных.
Оператор INSERT добавляет новые записи в таблицу Очевидно, что первой задачей после создания базы данных будет ее наполнение. Добавление новых записей в таблицы осуществляется командой INSERT, которая имеет несколько вариантов записи. Рассмотрим пример использования этой команды:
INSERT INTO items (item_name, category_id, item_price, item_quantity, country_id)
VALUES ("Порошок", 1, 36.50, 284, 2)
Проанализируйте необходимость использования значения NULL Такая команда добавляет одну запись в таблицу базы данных. После команды INSERT за служебным словом INTO следует имя таблицы, а затем в скобках — список имен полей, в которые необходимо занести данные. Ключевое поле VALUES стоит перед списком значений, которыми будут заполняться поля записи, причем количество элементов в списках полей и значений должно быть одинаково. Обратите внимание, что в списке полей могут присутствовать не все поля таблицы. Более того, при попытке внести значения в поля, объявленные с ключевым словом AUTO_INCREMENT, произойдет ошибка, так как они заполняются автоматически, обеспечивая уникальность записей. Поля, не вошедшие в список, заполняются значениями по умолчанию, хотя и тут надо обратить внимание на некоторые тонкости. Значение по умолчанию зависит от того, объявлено ли поле в таблице с ключевым словом NOT NULL, что определяет, могут ли значения поля приобретать значение NULL. Не путайте это значение с арифметическим нулем «0», или пустой строкой «»: NULL указывает на то, что у поля значения нет. Необходимость использования возможности приобретения полем такого значения встречается достаточно редко, и более того, в руководствах пользователя, которые есть найти на сайте www.mysql.com, можно найти предупреждение, что обработка полей со значением NULL замедляет работу сервера баз данных. Наиболее часто значение NULL используется в полях с датами, когда надо указать, что событие не произошло, что позволяет в одном поле указывать как дату события, так и с помощью значения NULL его отсутствие — например, например, рождение ребенка. Если же при создании поля в таблице было использовано ключевое слово NOT NULL, то по умолчанию поле будет приобретать, условно говоря, «нулевые» значения. Для числовых значений это будет «0», для символьных — пустая строка «», для значений типа «дата» — набор нулей. Если вас не устраивают такие значения по умолчанию, то при создании таблицы вы можете задать необходимые вам сами с помощью ключевого слова DEFAULT:
CREATE TABLE IF NOT EXISTS categories (
category_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
category_name VARCHAR(150) NOT NULL DEFAULT «Не известно»);
Одновременно можно добавить несколько записей Добавление одной записи — это наиболее часто встречающаяся операция при эксплуатации базы данных, но иногда, особенно при первом наполнении базы данных, может понадобиться занести большое количество строк. Для этого применяется та же команда, только после ключевого слова VALUES через запятые указываются несколько списков значений, соответствующих добавляемым записям:
INSERT INTO items (item_name, category_id, item_price, item_quantity, country_id)
values ("Порошок", 1, 36.50, 284, 2), ("Кукла", 2, 149.99, 5, 1),
("Молоток", 3, 90.00, 500, 3);
Существует еще одна форма оператора INSERT для добавления одной строки. По своему действию она ничем не отличается от уже рассмотренной формы, но ее синтаксис имеет более понятный вид, что облегчает поиск ошибок в SQL-командах:
INSERT INTO items SET item_name = «Порошок», category_id = 1, item_price = 36.50, item_quantity = 284, country_id = 2;
В этом варианте после ключевого слова SET полям таблицы присваиваются значения, подобно обычным языкам программирования, а пропущенные поля приобретают значения по умолчанию, как и в первом варианте записи.
Существует и третья форма оператора INSERT, которая используется гораздо реже — в основном, когда таблица заполняется данными на основе выборки информации из других таблиц и представляет собой комбинацию операторов SELECT и INSERT:
INSERT INTO summary (price, quantity) SELECT item_price, item_quantity FROM items;
Но, кроме добавления информации в таблицу, надо также и удалять уже неактуальную информацию. Удалить ненужные записи можно с помощью оператора DELETE:
DELETE FROM items WHERE item_name = «Порошок»;
Оператор DELETE очень прост в применении — необходимо только указать после ключевого слова FROM таблицу, из которой будут удаляться записи, а после WHERE — условие, указывающие какие строки следует удалить. Иначе говоря, условие WHERE можно назвать фильтром, и с помощью различных функций сравнения и логических операторов его можно сделать достаточно сложным, например:
DELETE FROM itmes WHERE item_price * item_quantity Оператор DELETE очень опасен В этом примере мы удаляем товары, общая цена которых меньше 100, и которые принадлежат к категории с уникальным номером 2. Но простота оператора DELETE делает его очень опасным, и еще большую опасность ему добавляет то, что если условие WHERE опущено, из таблицы удаляются ВСЕ записи, поэтому использовать его надо с большой осторожностью.
Помимо удаления и добавления новых записей, также приходится изменять информацию в существующих записях. Для этой цели используется оператор UPDATE:
UPDATE items SET item_name = «Порошок стиральный», item_quantity = 50 WHERE item_id = 1;
Изменить данные в записях можно оператором UPDATE Как видно, синтаксис этого оператора тоже достаточно простой и очень близок ко второй форме оператора INSERT для одной строки: после команды UPDATE следует имя таблицы, где будут производиться изменения, а после ключевого слова SET следует список столбцов, подлежащих изменению. В данном операторе условие WHERE имеет очень важное значение, так как только с помощью него мы можем точно указать, в какой записи следует производить изменения. В приведенном примере мы точно выбрали нужную запись, воспользовавшись полем item_id, обеспечивающим уникальность записей. Если условие WHERE не указать, то изменятся ВСЕ записи таблицы. Вышесказанное не означает, что изменять можно только одну строку в таблице; как и в случае оператора DELETE, можно сконструировать достаточно сложные условия, чтобы указать строки, в которых необходимо произвести изменение. Изменения полей также не ограничиваются простым присвоением: с левой стороны от оператора присвоения "=" может стоять вычисляемое выражение. Это может быть часто полезно, когда нужно произвести одинаковые изменения над большим количеством строк:
UPDATE items SET category_id = 3, item_price = item_price * 1.5 WHERE category_id = 2;
В этом примере товары из категории с номером 2 перемещаются в категорию с номером 3, при этом цена на них увеличивается в полтора раза. Подобным образом можно составлять очень сложные выражения для одновременного редактирования большого количества строк.
Вместо механизма транзакций используйте оператор LOCK Не следует забывать, что привычный по другим серверам баз данных механизм транзакций в MySQL не доступен, и за согласованием данных в таблицах необходимо следить самому пользователю. Рассогласование данных может возникнуть, к примеру, в случае когда пользователь заносит данные в таблицу на основе уже имеющейся в базе информации, и этот момент другой пользователь делает такую же операцию. В обоих случаях занесенная информация будет содержать ошибки. Несмотря на то, что такие данные требуются крайне редко, и вероятность одновременного занесения данных очень мала, учитывать такую возможность необходимо. Решение этой проблемы во многом подобно решениям, применяемым в веб-скриптах, когда на момент записи в данных файл на него накладывается блокировка на запись или на чтение. В MySQL для этих целей используется оператор LOCK, позволяющий заблокировать необходимые таблицы:
LOCK TABLES items WRITE, categories READ, countries READ;
Ключевое слово WRITE предусматривает полную блокировку, а READ — блокировку с правами чтения. При выполнении этого оператора снимаются все установленные до этого блокировки, поэтому необходимо указывать полный список таблиц, нуждающихся в блокировке. После внесения всех необходимых изменений в данные — добавления и удаления строк, редактирования информации — блокировки с таблиц можно снять командой UNLOCK TABLES.
Ссылки по теме
Статья получена: hostinfo.ru