Это уже четвертая часть из серии статей по SQL запросам к базам данных MySQL для начинающих. В предыдущих статьях рассматривались в основном «безопасные» команды для выборки записей и их значений из таблиц базы данных, а в этой, четвертой части, новичкам предлагается познакомиться с командами и примерами SQL запросов, которые позволяют вносить различные изменения в базе данных, включая удаление записей из таблиц. Основными и часто используемыми из них являются INSERT, UPDATE и DELETE.
INSERT — добавление строк в таблицу
Для добавления новых записей (строк) в таблицу базы данных используется оператор (команда) INSERT
.
INSERT INTO clients (name,city,age) VALUES('Иван','Москва',35);
Этот SQL запрос добавляет в таблицу clients
новую строку со значениями для полей name, city
и age
. Во избежание проблем и появления ошибок при добавлении новых строк в таблицу значения столбцов, перечисленных в группе VALUES(…), должны соответствовать типам полей, в которые эти значения добавляются. Другие поля, которые не указаны в запросе, будут заполнены значениями по умолчанию, которые были установлены при создании таблиц.
Если вы попытаетесь добавить в числовое поле какое-то значение, которое будет превышать допустимый диапазон, то в таблицу добавится число, усеченное до конечной точки соответствующего диапазона. Если же попытаться добавить в числовое поле например такое значение, как «123 abc», то в таблицу добавится только «123», т.е. не-числовая часть попросту будет обрезана. В случае попытки занесения в числовой столбец обычного текста (не числа), как «раз два три», в соответствующий столбец будет добавлено значение «0».
При добавлении строк в поля таких типов, как CHAR, VARCHAR, TEXT, BLOB
, следует иметь ввиду, что все строки, превышающие допустимую длину для столбцов таких типов, будут обрезаны до максимальной длины, указанной в свойствах соответствующих столбцов.
Если в столбец таблицы, назначенный для ввода даты или времени, попытаться добавить несоответствующий тип данных, то в такой столбец будет внесено нулевое значение, которое будет соответствовать конкретному типу.
В операторе INSERT
к значениям столбцов можно применять выражения (expressions), например математические, такие как умножение, вычитание, деление и так далее:
INSERT INTO clients (data1,data2) VALUES(25,data1*4); INSERT INTO clients (data1,data2) VALUES(79,data1-7);
Но важно учитывать, что применять выражения можно только к тем столбцам таблицы, которые были раньше внесены в список значений в SQL запросе. Поэтому такой запрос, как в следующем примере, приведет к ошибке:
INSERT INTO clients (data1,data2) VALUES(data2*4,25);
UPDATE — обновление значений столбцов
Оператор UPDATE
служит для внесения каких-либо изменений в значения строк таблицы базы данных, и он обязательно используется с выражением SET
, за которым перечисляются изменяемые поля и их значения:
UPDATE clients SET region="RF" WHERE city="Moscow";
Показанный запрос изменит в таблице clients
исходные значения всех полей region
на «RF» при условии, что поле city
будет иметь значение «Moscow». Значения остальных полей останутся прежними. Если выражение WHERE
в запросе отсутствует, то изменения коснутся абсолютно всех строк таблицы.
Для того, чтобы к примеру в таблице изменить только 3 записи, нужно использовать LIMIT
:
UPDATE clients SET region="RF" WHERE city="Moscow" LIMIT 3;
Обычно в SQL запросах LIMIT
используют совместно с выражением ORDER BY
, чтобы произвести обновления только в упорядоченных записях:
UPDATE clients SET region="RF" WHERE city="Moscow" ORDER BY `id` LIMIT 3;
После удачного выполнения запрос с оператором UPDATE возвращает количество строк таблицы, в которые были внесены изменения.
DELETE — удаление строк из таблицы
Команда DELETE
является наиболее «опасной» по сравнению со всеми, перечисленными ранее в этой и предыдущих статьях (SELECT, INSERT, UPDATE), так как с ее помощью выполняется безвозвратное удаление строк из указанной таблицы или нескольких таблиц базы данных. Поэтому использовать ее нужно крайне аккуратно.
Вот пример, когда удаляются ВСЕ строки из таблицы table1:
DELETE FROM table1
Однако можно ограничить количество удаляемых записей используя LIMIT
и выражения WHERE
. В следующем примере будут удалены 3 строки, подпадающие под условие, указанное в выражении WHERE:
DELETE FROM `clients` WHERE `age` < 21 ORDER BY `age` LIMIT 3
В выше приведенном примере задействовано еще и упорядочивание оператором ORDER BY
по столбцу «age», чтобы не удалить строки, ранее сохраненные в таблице в случайном порядке.
Вот еще один пример, когда SQL запрос удалит из таблицы только 5 самых старых записей. Записи при этом будут упорядочены по «timestamp» (время и дата):
DELETE FROM `clients` WHERE name='Ivan' ORDER BY timestamp LIMIT 5
или то же самое, но для двух таблиц `clients` и `salers`:
DELETE FROM `clients`,`salers` WHERE name='Ivan' ORDER BY timestamp LIMIT 5
—
На этом четвертая часть обзора SQL запросов к базе данных MySQL для новичков завершается. Продолжение статей по MySQL и SQL запросам еще будут, но возможно с некоторым перерывом на другие темы, так что подписывайтесь на новости блога, чтобы не пропустить что-то новое.
Предыдущие статьи из этой серии:
Первая часть
Вторая часть
Третья часть
Спасибо автору, прочитал все 4 части!
Опасные команды описаны :) Главное, чтобы новички не начали с ними упражняться, не сделав резервные копии. А то осознание сути команды drop database обычно приходит после успешного ее выполнения :)
На самом деле действительно лучше некоторые вещи для новичков было не показывать. Хотя в принципе это не секрет и всё есть в сети. =) Поэтому возможно каждый будет учиться на своих ошибках.
Когда я столкнулся с MYSQL, мне неведома была команда INSERT INTO table (…) SELECT (…), очень жалко, что в уроках для начинающих такая конструкция не описывается, и пока я ее узнал я понаписал много лишних строк кода.
Люблю SQL за его офегенную гибкость, No-sql — враг мой навеки:) Есть один сайтик хороший, правда на буржуйском, там есть классные справочники по mysql и не только _http://www.wowebook.in/
Очень даже не плохая статья для начинающего, ждем продолжения.
На самом деле действительно лучше некоторые вещи для новичков было не показывать. Хотя в принципе это не секрет и всё есть в сети. =) Поэтому возможно каждый будет учиться на своих ошибках.
Согласен с Sergey. Статьи будут действительно полезный новичкам и не только :)
Лучший научится на своих ошибках иногда)