Поиск по сайту:
Давать советы всегда плохо, но хорошего совета тебе никто не простит (Оскар Уайльд).

10 основных примеров команды DELETE в MariaDB / MySQL

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
04.11.2016
10 основных примеров команды DELETE в MariaDB / MySQL

Когда вы работаете с базой данных MySQL, в нескольких ситуациях вы можете удалить существующие записи из одной или нескольких таблиц.

На этом уроке мы расскажем, как использовать DELETE в MySQL с некоторыми полезными примерами.

Рассматриваются в данном руководстве следующие примеры:

  • Удаление конкретной строки
  • Удаление нескольких строк (с помощью сопоставления номера столбца)
  • Удаление нескольких строк (с помощью сопоставления строки столбца)
  • Удаление записей с опцией LIMIT
  • DELETE Vs Truncate (для удаления всех строк)
  • Удаление записей с вариантом IGNORE
  • Как использовать сортировку с операцией DELETE?
  • Удаление записей с опцией QUICK
  • Удаление записей с опцией LOW_PRIORITY
  • Удаление записей из нескольких таблиц с использованием INNER join

Для удаления записей из таблицы, вы должны иметь привилегию DELETE на конкретной таблице, из которой вы пытаетесь удалить строки.

Для этого урока мы будем использовать следующую таблицу сотрудников в качестве примера.

MariaDB [tgs]> SELECT * FROM worker;
+-----+----------+------------+--------+
| id  |   name   | dept       | salary |
+-----+----------+------------+--------+
| 100 | AndreyEx | Sales      |   5000 |
| 200 | Boris    | IT         |   5500 |
| 300 | Anna     | IT         |   7000 |
| 400 | Anton    | Marketing  |   9500 |
| 500 | Dima     | IT         |   6000 |
+-----+----------+------------+--------+

 

Если вы новичок в MySQL, вероятно, вы должны сначала понять основы MySQL, включая, как создать базу данных MySQL.

1. Удаление определенной строки

Чтобы удалить определенную строку, вы должны указать условие, при котором с помощью одного из значения столбцов первичного или уникального значения столбца.

Следующий пример удаляет одну запись из таблицы сотрудников, который имеет идентификатор 100.

MariaDB [tgs]> DELETE FROM worker WHERE id = 100;


Query OK, 1 row affected (0.01 sec)

 

В приведенном выше выводе:

  • Выход команды удаления покажет вам, сколько записей он удаляет. Как видно из приведенного выше вывода, говориться: “1 row affected”, что означает, что он удалил одну строку.
  • Выходной сигнал будет также сказать “Query OK”, если запрос был выполнен. Если есть ошибка синтаксиса, он будет отображать его здесь. Даже если он не удалит любую запись, эта строка будет по-прежнему говорить “Query OK”, пока не было никаких ошибок синтаксиса и утверждение было чистым. И, наконец, это также покажет, сколько времени потребовалось для MySQL для выполнения запроса (например: 0,01 секунды).

Первая запись с идентификатором 100 будет удалена из таблицы сотрудников.

MariaDB [tgs]> SELECT * FROM worker;
+-----+-------+------------+--------+
| id  | name  | dept       | salary |
+-----+-------+------------+--------+
| 200 | Boris | IT         |   5500 |
| 300 | Anna  | IT         |   7000 |
| 400 | Anton | Marketing  |   9500 |
| 500 | Dima  | IT         |   6000 |
+-----+-------+------------+--------+

 

2. Удаление нескольких строк с использованием столбца типа String Matching

Вы можете удалять записи из таблицы путем сопоставления столбца строки с определенными критериями.

Для строки, вы можете использовать ключевое слово “like”, который будет делать частичное соответствие. Для частичного соответствия используется % в столбце значений.

В следующем примере будем удалять записи из таблицы сотрудников, где значение в столбце DEPT начинается с “Tech”. Таким образом, это удалит все записи, где отдел “IT”.

MariaDB [tgs]> DELETE FROM worker WHERE dept LIKE 'IT%';


Query OK, 3 rows affected (0.00 sec)

 

Приведенный выше вывод указывает на то, что он удалил 3 записи. Как мы видим из следующего выхода, мы не видим больше записей отдела “IT”.

MariaDB [tgs]> SELECT * FROM worker;
+-----+----------+-----------+--------+
| id  | name     | dept      | salary |
+-----+----------+-----------+--------+
| 100 | AndreyEx | Sales     |   5000 |
| 400 | Anton    | Marketing |   9500 |
+-----+----------+-----------+--------+

 

Мы обсуждали много о различных практических условиях команды WHERE в нашем MySQL учебнике. Это очень полезно, чтобы понять, как эффективно использовать предложение WHERE во время удаления: 25 Основных примеров команды WHERE в MySQL.

3. Удаление нескольких строк, используя номер столбца Matching

Аналогично в приведенном выше примере номера столбца, вы можете также удалять записи из таблицы путем сопоставления столбца строке с определенными критериями.

Ниже будем удалять записи из таблицы сотрудников, где зарплата меньше или равна 700.

MariaDB [tgs]> DELETE FROM worker WHERE salary <=7000;


Query OK, 4 rows affected (0.00 sec)

 

Вышеуказанная команда удалила 4 записи из нашей таблицы сотрудников. У нас в настоящее время осталась только одна запись.

MariaDB [tgs]> SELECT * FROM worker;
+-----+-------+-----------+--------+
| id  | name  | dept      | salary |
+-----+-------+-----------+--------+
| 400 | Anton | Marketing |   9500 |
+-----+-------+-----------+--------+

 

4. Удаление строк с опцией LIMIT

Даже тогда, когда соответствует много записей, вы все еще можете ограничить, сколько записей следует удалить с помощью опции LIMIT.

Это очень полезно, когда команда удаления занимает очень много времени, и вы хотите разорвать операцию удаления на несколько кусков. Например, при удалении более 100 000 записей, вы можете использовать LIMIT 10000, чтобы удалить только 10000 записей в один момент.

Например, следующая команда удаления без какой-либо опции LIMIT будут удалять все соответствующие записи. т.е. этот удалила 5 записей.

MariaDB [tgs]> DELETE FROM worker WHERE id > 1 ;


Query OK, 5 rows affected (0.00 sec)

 

Но когда вы используете опцию LIMIT, то следующим будут удалять только 2 записи, даже если запросу соответствует 5 записей.

MariaDB [tgs]> DELETE FROM worker WHERE id > 1 LIMIT 2;


Query OK, 2 rows affected (0.01 sec)

 

Выполнить ту же команду удаления еще раз, что приведет к удалению больше 2 записей.

MariaDB [tgs]> DELETE FROM worker WHERE id > 1 LIMIT 2;


Query OK, 2 rows affected (0.00 sec)

 

При выполнении его снова, на этот раз он удаляется только одну запись, так как это последний совпадающие записи.

MariaDB [tgs]> DELETE FROM worker WHERE id > 1 LIMIT 2;


Query OK, 1 row affected (0.00 sec)

 

Теперь у нас нет каких-либо более совпадающих записей для удаления.

MariaDB [tgs]> DELETE FROM worker WHERE id > 1 LIMIT 2;


Query OK, 0 rows affected (0.00 sec)

 

5. DELETE Vs Truncate (для удаления всех строк)

Если вы хотите удалить все строки из таблицы, вы можете использовать либо команду DELETE или команду TRUNCATE, как показано ниже. Оба будут делать то же самое. Но есть разница.

MariaDB [tgs]> DELETE FROM worker;

Query OK, 5 rows affected (0.00 sec)

(или)

MariaDB [tgs]> TRUNCATE TABLE worker;

Query OK, 0 rows affected (0.00 sec)

 

Ниже приведены несколько вещей, которые вы должны знать о DELETE против TRUNCATE:

  • TRUNCATE это намного быстрее, чем DELETE. Если вы просто хотите быстрый способ очистить таблицу, используйте TRUNCATE.
  • DELETE это заявление DML. TRUNCATE это заявление DDL.
  • При выполнении команды TRUNCATE, это действительно удалит таблицу и заново создать пустую таблицу. Именно по этой причине усечения очень быстро, так как она не удаляет записи один за другим, как команда удаления.
  • Когда есть замок на конкретной таблице, вы не можете использовать команду TRUNCATE.
  • Как видно из приведенного выше вывода команды TRUNCATE не показывает, сколько строк будут удалено. Он просто скажет: “0 rows affected”, даже когда он обрезает таблицу, в которой было несколько строк.
  • Так что, если вам нужно знать, сколько записей во время очистки таблицы были удалены, вы должны использовать DELETE.
  • Если у вас есть триггер on-delete на удаление таблицы, при выполнении команды TRUNCATE, эти триггеры выполняться не будут.
  • Наконец, важное отличие заключается в следующем: При выполнении команды TRUNCATE, вы не можете откатить. Но при выполнении команды DELETE, вы можете откатить. Округление делает неявное обязательство.

6. Удалить строки с опцией IGNORE

Вы можете использовать ключевое слово IGNORE вместе с командой DELETE (т.е. DELETE IGNORE), когда вы хотите игнорировать реальное действительное сообщение об ошибке, если вы знаете, ваша конкретная команда DELETE будет сбрасывать.

Таким образом, когда вы используете DELETE IGNORE, если есть любое действительное сообщение об ошибке, он будет рассматриваться только как предупреждение. Вы должны быть очень осторожны, когда вы используете DELETE IGNORE, особенно в таблице, где у вас есть внешний ключ, так как DELETE IGNORE просто удалит записи, не беспокоясь о каких-либо внешних зависимостей внешнего ключа.

MariaDB [tgs]> DELETE IGNORE 
FROM contractorbenefits 
WHERE id > 200;


Query OK, 3 rows affected, 1 warning (0.01 sec)

 

Как видно из приведенного выше вывода, DELETE IGNORE удалит записи из таблицы, даже если существует зависимость внешнего ключа. Он просто выведет те реальные сообщение об ошибке как предупреждения.

7. Зачем использовать Order с DELETE?

Вы можете использовать Order вместе с командой Delete.

Это может быть очень полезно, если вы хотите, чтобы ваши строки будут удалены в определенном порядке.

В команде удаления, когда вы объединяете “order by” и опцию “limit”, вы можете сделать некоторые трюки.

Например, при выполнении следующей команды удаления без “order by”, удалит запись сотрудника с кодом 100 (т.е. самого старого сотрудника в отделе «IT»).

MariaDB [tgs]> DELETE FROM worker 
WHERE dept = 'IT' LIMIT 1;


Query OK, 1 row affected (0.00 sec)

 

Приведенная выше команда удалила идентификационный номер сотрудника 200 (самый старый работник IT).

MariaDB [tgs]> SELECT * FROM worker;
+-----+----------+------------+--------+
| id  | name     | dept       | salary |
+-----+----------+------------+--------+
| 100 | AndreyEx | Sales      |   5000 |
| 300 | Anna     | IT         |   7000 |
| 400 | Anton    | Marketing  |   9500 |
| 500 | Dima     | IT         |   6000 |
+-----+----------+------------+--------+

 

Но, вы можете также удалить нового сотрудника в отделе «IT», если объединить и упорядочить по LIMIT, как показано ниже.

MariaDB [tgs]> DELETE FROM worker 
WHERE dept = 'IT' 
ORDER BY id DESC LIMIT 1;


Query OK, 1 row affected (0.00 sec)

 

Приведенная выше команда удалила идентификационный номер сотрудника 500 (самый новый работник IT).

MariaDB [tgs]> SELECT * FROM worker;
+-----+----------+------------+--------+
| id  | name     | dept       | salary |
+-----+----------+------------+--------+
| 100 | AndreyEx | Sales      |   5000 |
| 200 | Boris    | IT         |   5500 |
| 300 | Anna     | IT         |   7000 |
| 400 | Anton    | Marketing  |   9500 |
+-----+----------+------------+--------+

 

Кроме того, имейте в виду, что вы можете использовать ORDER BY в предложении, если вы хотите удалить записи в определенной последовательности, чтобы избежать каких-либо ограничений ссылочной целостности.

8. Удаление строк с опцией QUICK

В огромной таблице, которая имеет некоторые индексы, вы можете использовать быстрый вариант для ускорения операции удаления, как показано ниже.

MariaDB [tgs]> DELETE QUICK FROM worker WHERE id > 200;


Query OK, 3 rows affected (0.00 sec)

 

В Delete, когда вы используете быстрый вариант, это не слияние индексов, которые могут Ускорить операцию удаления в зависимости от вида индексов, которые есть у вас в таблице.

9. Удаление строк с опцией LOW_PRIORITY

Низкий приоритет очень полезен, когда вы пытаетесь удалить записи из таблицы, которая слишком большая.

Ключевое слово LOW_PRIORITY будет эффективным только на этих двигателях хранения: MyISAM, MEMORY и MERGE. т.е. Вы можете использовать эту функцию только на двигателях для хранения базы данных, которые реализуют блокировки на уровне таблицы.

MariaDB [tgs]> DELETE LOW_PRIORITY 
FROM worker 
WHERE dept IN ('Sales', 'Marketing');


Query OK, 2 rows affected (0.01 sec)

 

При использовании ключевого слова LOW_PRIORITY, операция удаления будет происходить только тогда, когда никто не читает из таблицы.

10. Удалить из нескольких таблиц с использованием INNER JOIN

Во всех предыдущих примерах мы использовали команду удаления, чтобы удалить только записи из одной таблицы.

Есть два способа. когда можно указать удаление записей из нескольких таблиц.

В первом способе, можно указать таблицы, из которых записи будут удалены перед ключевым словом “FROM”, как показано ниже. Ниже будут удалены записи из worker и benefits таблиц, которые соответствуют критериям, указанным в условии where.

DELETE worker, benefits FROM worker 
 INNER JOIN benefits INNER JOIN contractor
 WHERE worker.id=benefits.id AND benefits.id=contractor.id;

 

Во втором способе, можно указать таблицы, где записи будут удалены,  после ключевого слова “FROM”, как показано ниже. Ниже будет удалять записи из worker и benefits, которые соответствуют критериям, указанным в условии where.

DELETE FROM worker, benefits USING worker 
 INNER JOIN benefits INNER JOIN contractor
 WHERE worker.id=benefits.id AND benefits.id=contractor.id;

10 основных примеров команды DELETE в MariaDB / MySQL

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Спасибо!

Теперь редакторы в курсе.