HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>После того, как мы создали таблицу, в нее можно добавлять данные. В этом уроке разберем, как вставить данные в таблицу, обновить и удалить их. Все запросы этого урока выполняются на базе данных с таблицей courses:</p>
1 <p>После того, как мы создали таблицу, в нее можно добавлять данные. В этом уроке разберем, как вставить данные в таблицу, обновить и удалить их. Все запросы этого урока выполняются на базе данных с таблицей courses:</p>
2 <h2>Работаем с данными в таблице</h2>
2 <h2>Работаем с данными в таблице</h2>
3 <p>С данными в SQL работают с помощью подмножества<strong>DML</strong>(Data Manipulation Language). Оно включает:</p>
3 <p>С данными в SQL работают с помощью подмножества<strong>DML</strong>(Data Manipulation Language). Оно включает:</p>
4 <ul><li>INSERT - запрос на вставку данных</li>
4 <ul><li>INSERT - запрос на вставку данных</li>
5 <li>UPDATE - запрос на обновление данных</li>
5 <li>UPDATE - запрос на обновление данных</li>
6 <li>DELETE - запрос на удаление данных</li>
6 <li>DELETE - запрос на удаление данных</li>
7 </ul><p>Разберем каждый запрос подробнее.</p>
7 </ul><p>Разберем каждый запрос подробнее.</p>
8 <h3>Вставка данных в таблицу</h3>
8 <h3>Вставка данных в таблицу</h3>
9 <p>Чтобы вставить данные в таблицу, нужно выполнить INSERT INTO запрос:</p>
9 <p>Чтобы вставить данные в таблицу, нужно выполнить INSERT INTO запрос:</p>
10 <ul><li>INSERT INTO courses - запрос на вставку в таблицу<em>courses</em></li>
10 <ul><li>INSERT INTO courses - запрос на вставку в таблицу<em>courses</em></li>
11 <li>(name, slug, lessons_count, body) - список полей, которые нужно вставить</li>
11 <li>(name, slug, lessons_count, body) - список полей, которые нужно вставить</li>
12 <li>('basics of programming', 'basics', 10, 'this is theory') - значения вставленных полей в том же порядке</li>
12 <li>('basics of programming', 'basics', 10, 'this is theory') - значения вставленных полей в том же порядке</li>
13 </ul><p>Выполнять запрос на вставку можно любое количество раз. Каждый раз в таблице будет создаваться новая запись, даже если данные не поменялись. Изменить это поведение можно с помощью уникальных индексов, которые разберем позже.</p>
13 </ul><p>Выполнять запрос на вставку можно любое количество раз. Каждый раз в таблице будет создаваться новая запись, даже если данные не поменялись. Изменить это поведение можно с помощью уникальных индексов, которые разберем позже.</p>
14 <p>Если мы хотим оставить некоторые поля пустыми, то достаточно пропустить их при вставке в обеих частях запроса. В таком случае значением этих полей будет NULL:</p>
14 <p>Если мы хотим оставить некоторые поля пустыми, то достаточно пропустить их при вставке в обеих частях запроса. В таком случае значением этих полей будет NULL:</p>
15 <p>NULL - это специальное значение и оно одно. Пустая строка, 0 и тому подобные вещи не являются NULL.</p>
15 <p>NULL - это специальное значение и оно одно. Пустая строка, 0 и тому подобные вещи не являются NULL.</p>
16 <p>INSERT позволяет вставить сразу несколько записей в рамках одного запроса. Для этого достаточно перечислить все необходимые значения в круглых скобках через запятую после ключевого слова VALUES:</p>
16 <p>INSERT позволяет вставить сразу несколько записей в рамках одного запроса. Для этого достаточно перечислить все необходимые значения в круглых скобках через запятую после ключевого слова VALUES:</p>
17 <p>Поля можно не указывать, тогда это равносильно их полному перечислению:</p>
17 <p>Поля можно не указывать, тогда это равносильно их полному перечислению:</p>
18 <p>Чтобы извлечь данные и посмотреть содержимое таблицы, используем запрос SELECT:</p>
18 <p>Чтобы извлечь данные и посмотреть содержимое таблицы, используем запрос SELECT:</p>
19 <p>Запрос SELECT не является частью DML. Подробнее о нем поговорим в следующем уроке.</p>
19 <p>Запрос SELECT не является частью DML. Подробнее о нем поговорим в следующем уроке.</p>
20 <h3>Обновление или изменение данных</h3>
20 <h3>Обновление или изменение данных</h3>
21 <p>Обновление записей в таблице выполняется UPDATE запросом:</p>
21 <p>Обновление записей в таблице выполняется UPDATE запросом:</p>
22 <p>Обычно UPDATE запрос состоит из двух частей:</p>
22 <p>Обычно UPDATE запрос состоит из двух частей:</p>
23 <ol><li>SET body = 'updated!' - описывается, какое значение установить в какое поле</li>
23 <ol><li>SET body = 'updated!' - описывается, какое значение установить в какое поле</li>
24 <li>WHERE slug = 'bash' - указывается ограничение на то, к каким строкам применить обновление</li>
24 <li>WHERE slug = 'bash' - указывается ограничение на то, к каким строкам применить обновление</li>
25 </ol><p>Символ "=" в WHERE - это не присваивание, а проверка на совпадение. В SET равно используется как обычное присваивание.</p>
25 </ol><p>Символ "=" в WHERE - это не присваивание, а проверка на совпадение. В SET равно используется как обычное присваивание.</p>
26 <p>Поскольку в нашей таблице только одна запись удовлетворяет условию slug = 'bash', то и обновится одна запись. Если бы их было больше, то обновились бы все соответствующие записи.</p>
26 <p>Поскольку в нашей таблице только одна запись удовлетворяет условию slug = 'bash', то и обновится одна запись. Если бы их было больше, то обновились бы все соответствующие записи.</p>
27 <p>UPDATE в примере выше можно выполнять безопасно любое количество раз. После первого запроса дальнейшие его вызовы не сделают никаких изменений.</p>
27 <p>UPDATE в примере выше можно выполнять безопасно любое количество раз. После первого запроса дальнейшие его вызовы не сделают никаких изменений.</p>
28 <p>За одну операцию можно обновить несколько полей. Для этого достаточно перечислить каждое присваивание через запятую в части SET. Порядок, в котором изменяются поля, - не важен:</p>
28 <p>За одну операцию можно обновить несколько полей. Для этого достаточно перечислить каждое присваивание через запятую в части SET. Порядок, в котором изменяются поля, - не важен:</p>
29 <p>Часть WHERE можно вообще не указывать:</p>
29 <p>Часть WHERE можно вообще не указывать:</p>
30 <p>Такой запрос обновит все записи. Если записей в таблице много и они важны, то он приведет к тому, что данные конкретного поля будут перезаписаны у всех данных в таблице. Почти наверняка это не то, чего мы хотим. Поэтому нужно внимательно следить за тем, как пишется update. Потеря условия WHERE может обернуться перезаписью важных данных.</p>
30 <p>Такой запрос обновит все записи. Если записей в таблице много и они важны, то он приведет к тому, что данные конкретного поля будут перезаписаны у всех данных в таблице. Почти наверняка это не то, чего мы хотим. Поэтому нужно внимательно следить за тем, как пишется update. Потеря условия WHERE может обернуться перезаписью важных данных.</p>
31 <p>Проверка на точное соответствие это самый простой способ сравнения, которого не всегда достаточно. SQL позволяет выполнять значительно более хитрые проверки. Рассмотрим несколько примеров:</p>
31 <p>Проверка на точное соответствие это самый простой способ сравнения, которого не всегда достаточно. SQL позволяет выполнять значительно более хитрые проверки. Рассмотрим несколько примеров:</p>
32 <ul><li><p>Операции сравнения</p>
32 <ul><li><p>Операции сравнения</p>
33 <p>Мы можем использовать любые математические операции сравнения: больше, меньше, не равно и другие.</p>
33 <p>Мы можем использовать любые математические операции сравнения: больше, меньше, не равно и другие.</p>
34 </li>
34 </li>
35 <li><p>Логические операции</p>
35 <li><p>Логические операции</p>
36 <p>Мы можем использовать логические операции для объединения условий: И и ИЛИ.</p>
36 <p>Мы можем использовать логические операции для объединения условий: И и ИЛИ.</p>
37 <p>Для логических операций используются ключевые слова AND и OR. Их можно добавлять и комбинировать в любых количествах. Как и в случае с обычными языками программирования, в составных выражениях полезно задавать приоритет с помощью круглых скобок:</p>
37 <p>Для логических операций используются ключевые слова AND и OR. Их можно добавлять и комбинировать в любых количествах. Как и в случае с обычными языками программирования, в составных выражениях полезно задавать приоритет с помощью круглых скобок:</p>
38 </li>
38 </li>
39 </ul><h3>Удаление данных</h3>
39 </ul><h3>Удаление данных</h3>
40 <p>Последний запрос из DML - DELETE. С его помощью можно удалить данные из таблицы:</p>
40 <p>Последний запрос из DML - DELETE. С его помощью можно удалить данные из таблицы:</p>
41 <p>Этот запрос работает практически так же, как и UPDATE. Только здесь ничего не надо указывать после DELETE.</p>
41 <p>Этот запрос работает практически так же, как и UPDATE. Только здесь ничего не надо указывать после DELETE.</p>
42 <p>Такой запрос опасно выполнять. Он отработает, даже если не указана секция WHERE. Секция WHERE в разных видах запросов работает идентично - все, что описывалось для UPDATE, справедливо и для DELETE.</p>
42 <p>Такой запрос опасно выполнять. Он отработает, даже если не указана секция WHERE. Секция WHERE в разных видах запросов работает идентично - все, что описывалось для UPDATE, справедливо и для DELETE.</p>
43 <p>В базах данных есть еще один способ удалять данные в таблице - TRUNCATE. Это не часть стандарта, но реализуется большинством баз данных. У этого запроса есть две особенности:</p>
43 <p>В базах данных есть еще один способ удалять данные в таблице - TRUNCATE. Это не часть стандарта, но реализуется большинством баз данных. У этого запроса есть две особенности:</p>
44 <ul><li>Он предназначен для полной очистки таблиц</li>
44 <ul><li>Он предназначен для полной очистки таблиц</li>
45 <li>В отличие от DELETE, он выполняется очень эффективно, так как у TRUNCATE нет возможности задавать условия. В этом случае СУБД не нужно ничего дополнительно анализировать. Она сразу очищает место на диске без промежуточных этапов:</li>
45 <li>В отличие от DELETE, он выполняется очень эффективно, так как у TRUNCATE нет возможности задавать условия. В этом случае СУБД не нужно ничего дополнительно анализировать. Она сразу очищает место на диске без промежуточных этапов:</li>
46 </ul><h2>Выводы</h2>
46 </ul><h2>Выводы</h2>
47 <p>В этом уроке мы рассмотрели этап добавления данных в таблицу. Кроме того, их можно обновлять и удалять. С последними двумя запросами стоит быть осторожными, так как при обновлении всех записей могут быть серьезные последствия. А с помощью DELETE можно удалить всю информацию безвозвратно.</p>
47 <p>В этом уроке мы рассмотрели этап добавления данных в таблицу. Кроме того, их можно обновлять и удалять. С последними двумя запросами стоит быть осторожными, так как при обновлении всех записей могут быть серьезные последствия. А с помощью DELETE можно удалить всю информацию безвозвратно.</p>