mysql delete statement delete command syntax
Цей посібник пояснює, як використовувати оператор MySQL DELETE для видалення даних із таблиці або видалення всієї таблиці та різниці між командами 'Зрізати та видалити':
Як відомо, у MySQL DELETE - це мова керування даними або DML.
Як випливає з назви, команда використовується для видалення рядків з таблиці. За допомогою цієї команди ми можемо видалити один або кілька небажаних рядків за одну транзакцію. Існує кілька способів видалення записів із таблиці за допомогою команди DELETE.
як відкрити двійковий файл
У цьому підручнику ми детально обговоримо все це разом із простими прикладами.
Що ви дізнаєтесь:
- Команда DELETE MySQL
- Різниця між операторами TRUNCATE та DELETE
- Посилальна цілісність та її вплив на ВИДАЛЕННЯ
- Часті запитання та відповіді
- Висновок
Команда DELETE MySQL
Існує важливий фактор, про який слід пам’ятати, перш ніж продовжувати. Будь-який рядок або кілька рядків, які ми видаляємо за допомогою команди DELETE, ніколи не можна отримати.
Таким чином, щоб уникнути сценаріїв, коли рядок видаляється помилково, доцільно зробити резервну копію таблиці перед виконанням оператора DELETE. Пізніше ми зможемо використовувати цю резервну копію для відновлення таблиці на випадок помилок.
Примітка: Ми використовуємо MySQL версії 8.0. Ви можете завантажити його з тут .
Синтаксис видалення MySQL:
DELETE (LOW_PRIORITY) (QUICK) (IGNORE) FROM tablename(.*) (, tablename(.*)) (WHERE condition) (ORDER BY) (LIMIT row_count) ;
Пояснення синтаксису:
- Синтаксис починається з ключового слова “ВИДАЛИТИ”, тим самим повідомляючи MySQL Server про тип діяльності, яку потрібно виконати. Це обов’язкове ключове слово, і його не можна пропустити.
- Далі йде ім'я таблиці, в якій має бути виконана операція ВИДАЛЕННЯ. Це також є обов’язковим і не можна пропустити. Тут ми можемо згадати одне або декілька назв таблиць.
- Далі ми можемо згадати будь-яку умову, яка контролює придатність рядків для видалення. Це необов’язкове речення. Ключове слово тут - ДЕ.
- За реченням WHERE слідує речення ORDER BY, яке передбачає видалення рядків у певному порядку, за зростанням чи за спаданням, у стовпці (колонках). Це необов’язкове речення.
- Речення LIMIT слідує за реченням ORDER BY. Він встановлює обмеження на кількість рядків, які оператор DELETE може видалити з таблиці.
Модифікатори у заяві DELETE
# 1) LOW_PRIORITY:
Цей модифікатор інформує движок MySQL про затримку виконання оператора DELETE до того моменту, коли з таблиці не буде прочитаних з'єднань, з яких ми намагаємось ВИДАЛИТИ.
Це допомагає досягти узгодженості всіх інших операцій, які будуть виконуватися за цим столом. Це також допомагає уникнути проблем із блокуванням таблиці.
# 2) ШВИДКО:
Щоразу, коли ми видаляємо рядок, відповідний індекс також видаляється. Витрата місця під час виконання оператора DELETE забирає час процесора. Якщо ми використовуємо ключове слово QUICK, тоді відповідний індексний простір залишається невикористаним і може бути використаний, коли вставляються нові записи, які відповідають діапазону індексу, який було видалено раніше.
Наприклад, розглянемо таблицю співробітників, де ідентифікатор працівника є індексом. Щоразу, коли працівник залишає організацію, нам потрібно видалити відповідний запис. Якщо ми використовуємо речення QUICK, тоді відповідний індексний простір залишиться невикористаним.
Коли новий працівник приєднується, він / вона отримає новий номер працівника, а не однакову кількість того, хто пішов. У таких прикладах недоцільно використовувати QUICK.
Приклад видалення MYSQL
Нижче наведено зразок таблиці, створеної в MYSQL.
Назва схеми: тихоокеанський
Назва таблиці: службовців
Назви стовпців:
empNum; Містить цілі значення для номера працівника.
прізвище: Утримує значення varchar для прізвища працівника.
ім'я: Утримує значення varchar для імені працівника.
електронна адреса: Містить значення varchar для ідентифікатора електронної пошти працівника.
deptNum; Утримує varchar для ідентифікатора відділу, до якого належить працівник.
зарплата: Містить десяткові значення заробітної плати кожного працівника.
дата початку: Утримує значення дати для дати приєднання працівника.
Назва схеми: тихоокеанський
Назва таблиці: службовці_історія
Назви стовпців:
empNum; Утримує цілі значення для номера працівника.
прізвище: Утримує значення varchar для прізвища працівника.
ім'я: Утримує значення varchar для імені працівника.
електронна адреса: Містить значення varchar для ідентифікатора електронної пошти працівника.
deptNum; Утримує varchar для ідентифікатора відділу, до якого належить працівник.
зарплата: Містить десяткові значення заробітної плати кожного працівника.
дата початку: Містить значення дати на дату приєднання працівника.
Назва схеми: тихоокеанський
Назва таблиці: кафедри
Назви стовпців:
deptNum; Утримує varchar для ідентифікатора відділу в організації.
місто: Утримує назву міста, в якому працюють департаменти.
країна: Утримує назву країни, що відповідає місту.
бонус: Утримує процентне значення бонусу.
MySQL Видалити один рядок
Перший і простіший спосіб видалення записів з таблиці при видаленні записів по одному, за допомогою дуже сильного речення WHERE, що забезпечує видалення лише одного відповідного запису. Це може бути використане для видалення набору подібних типів рядків із таблиці.
Давайте детально розглянемо оператор видалення та його виконання.
Тут ми спробуємо видалити працівника на ім’я «Кріс Нолан» з номером працівника 1013.
Як зображено на малюнку вище, оператор DELETE успішно виконано та видалено один рядок із таблиці працівника.
вихід інструкція нижче показує час, коли був виконаний оператор, оператор MySQL, який був виконаний, і кількість рядків, на які це вплинуло.
Будь ласка, будьте дуже впевнені, про пункт WHERE тут. Якщо речення WHERE неправильне або якщо ви пропустите наявність речення WHERE, це може призвести до втрати даних. Щоб уникнути подібних ситуацій, у виробництві існує практика періодичного резервного копіювання чи вивантаження даних.
Для того, щоб перевірити вихід цього оператора DELETE, виконаймо оператор SELECT у цій таблиці з empNum як 1013.
Вихідні результати показують значення NULL для всіх стовпців, що означає, що для такого empNum не існує запису. Вихідні дані запиту нижче показують, що було повернуто 0 рядків, що означає, що запис був видалений виконанням наведеного вище оператора DELETE.
Запит:
DELETE FROM employees WHERE empNum = 1013 ;
Знімок таблиці після:
empNum | прізвище | ім'я | електронною поштою | deptNum | Зарплата |
---|---|---|---|---|---|
7 | Це порівняно повільніше, ніж TRUNCATE, якщо порівнювати для видалення цілих даних із таблиці. | Це порівняно швидше, ніж DELETE, у порівнянні з видаленням цілих даних із таблиці. | |||
НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ |
MySQL DELETE, використовуючи пункт ORDER BY AND LIMIT
ORDER BY та LIMIT - це два пункти, про які ми вже говорили вище. Перший допомагає визначити порядок очищення записів, або видалити записи з empNum по зростанню, або видалити записи із зарплатою за спаданням. Останнє допомагає обмежити кількість записів, які ця транзакція може видалити.
Наприклад, якщо ми хочемо видалити лише 2 працівників відділу № 4, які отримують високу зарплату. Тоді є три частини цього запиту.
- Спочатку, нам потрібно очистити співробітників з відділу № 4. Це буде оброблено положенням WHERE.
- Далі, нам потрібно чистити працівників, які заробляють високі зарплати. Це буде оброблено пунктом ORDER BY у стовпці заробітної плати в порядку зменшення.
- Нарешті, нам потрібно провести чистку лише двох працівників. Це буде розглянуто застереженням LIMIT.
Давайте подивимось на запит DELETE і побачимо результати. Перш ніж це зробити, давайте спочатку визначимо, які саме записи ми хочемо видалити. Ми використаємо наведені вище умови з оператором SELECT, щоб отримати записи, які ми хочемо видалити, а пізніше виконаємо той самий запит, щоб перевірити, чи були ці записи видалені чи ні.
У наведеному вище запиті SELECT ми виконали всі три умови, про які ми говорили вище, використовуючи речення WHERE, ORDER BY та LIMIT. Запит дав нам 2 записи, один із empNum 1010, а інший - 1007. Тепер ми виконаємо запит DELETE, щоб переконатися, що ці два записи видалено.
Як показано на малюнку вище, оператор DELETE успішно виконаний і видалив два рядки зі таблиці працівника. вихід інструкція нижче показує час, коли був виконаний оператор, оператор MySQL, який був виконаний, і кількість рядків, на які це вплинуло.
Для того, щоб перевірити результати цього оператора DELETE, виконаймо SELECT для empNum 1010 та 1007. Ми не можемо використовувати той самий запит SELECT, що і вище, як той, що відображав би інших співробітників під номером deptNum 4.
Вихідні результати показують значення NULL для всіх стовпців, що означає, що не існує записів для таких номерів працівників. Вихідні дані наведеного нижче запиту показує, що було повернуто 0 рядків, що означає, що запис було видалено виконанням наведеного вище оператора DELETE.
Запит:
як відкрити файл .eps
DELETE FROM employees WHERE deptNum = 4 ORDER BY salary DESC LIMIT 2 ;
Знімок таблиці після:
empNum | прізвище | ім'я | електронною поштою | deptNum | Зарплата |
---|---|---|---|---|---|
НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ |
MySQL DELETE за допомогою пункту вибору
Далі ми розглянемо використання пропозиції SELECT під час видалення записів з однієї таблиці.
Розглянемо такий сценарій:
У нас є два набори таблиць: співробітників та підрозділів. deptNum - це як первинний ключ у таблиці відділу та зовнішній ключ у таблиці працівника. Це означає, що якщо працівникові призначено департамент, то він повинен бути з одного з департаментів у таблиці департаментів.
Тепер ми маємо видалити ті записи із таблиці відділу, куди досі не було призначено жодного працівника. Ми можемо зробити це, маючи пропозицію SELECT у підзапиті запиту DELETE.
Спершу визначимо записи, які ми хочемо видалити:
Наведений вище запит SELECT має підзапит.
Функціонування запиту є таким:
Запит витягує всі записи із таблиці відділу, де номер таблиці не існує в таблиці працівника. Приєднання виконується в підзапиті на deptNum двох таблиць.
Тепер давайте запустимо запит DELETE і подивимось, чи зможемо ми видалити ці два записи із таблиці відділу, оскільки до цих підрозділів не призначено жодного працівника.
Як зображено на наведеному вище малюнку, оператор видалення видалив 2 рядки з таблиць відділів, у яких до нього не призначений працівник.
Для того, щоб перевірити результати цього оператора DELETE, давайте виконаємо SELECT у таблиці та подивимося, що ми маємо у вихідних даних.
У вихідному повідомленні вищезазначеного запиту на підтвердження написано “0 рядків повернуто”. Це означає, що рядки з deptNum 6 та 7 видаляються. Вихідні дані також не показують жодних записів, замість того, щоб показувати значення NULL, оскільки записи були видалені.
Запит:
DELETE FROM departments WHERE NOT EXISTS (SELECT deptNum FROM employees WHERE departments.deptNum = employees.deptNum ) ;
MySQL DELETE Цілі дані з таблиці
Далі ми розглянемо сценарій, коли нам доведеться видалити всі рядки або записи з таблиці.
У виробничій ситуації ви можете ніколи не зіткнутися з такою ситуацією. Але такого роду речі знадобляться в області розробки, де вам доведеться протестувати свій код за допомогою декількох різних сценаріїв, і ви можете створити новий набір тестових даних, видаливши записи, що існують у таблиці.
По-перше, давайте розглянемо дані, які ми маємо намір видалити. Ми спробуємо видалити дані з таблиці staff_history.
Нижче наведено поточні дані в таблиці.
Тут ми маємо 18 рядків у таблиці staff_history. Давайте тепер видалимо все це за одну транзакцію. Запит майже схожий на той, який ми обговорювали в першому розділі. Єдина зміна полягає в тому, що нам потрібно видалити пропозицію WHERE із запиту, щоб не було обмежень щодо кількості рядків, які ми хочемо видалити.
Як показано на малюнку вище, оператор видалення успішно виконано та видалено всі 18 рядків із таблиці staff_history. Вихідний оператор нижче показує час, коли виконувався оператор, виконуваний оператор MySQL та кількість рядків, на які це впливало.
Для того, щоб перевірити результати цього оператора DELETE, давайте виконаємо SELECT у таблиці та подивимося, що ми маємо у вихідних даних.
Вихідні результати показують значення NULL для всіх стовпців, що означає, що не існує записів для таких номерів працівників. Вихідні дані запиту нижче показують, що було повернуто 0 рядків, що означає, що всі записи були видалені виконанням вищезазначеного оператора DELETE.
Запит:
DELETE FROM employees_history ;
Знімок таблиці після:
empNum | прізвище | ім'я | електронною поштою | deptNum | Зарплата |
---|---|---|---|---|---|
НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ | НУЛЬ |
MySQL DELETE Ціла таблиця
Тепер ми розглянемо сценарій, коли нам доведеться видалити саму таблицю. У термінах SQL ми називаємо це DROP the table. Не має значення, чи є в таблиці дані чи ні. Він просто опустить таблицю разом із даними, якщо такі є.
У наведеному вище розділі ми видалили дані з таблиці staff_history. У цьому розділі ми опустимо саму таблицю staff_history.
Далі йде команда разом з її результатом:
Як показано на малюнку вище, оператор DROP був успішно виконаний і видалив таблицю staff_history із системного каталогу бази даних MySQL.
Якщо ви поглянете на повідомлення, воно покаже “0 рядків, на які впливає”. Це тому, що ми видалили всі 18 рядків у попередньому розділі. Якби ця таблиця мала будь-які рядки, то це число рядків впливало б, що означає видалення.
Для того, щоб перевірити результати цього оператора DROP, давайте виконаємо SELECT у таблиці та подивимося, що ми маємо у вихідних даних.
Вихідне повідомлення вищезазначеного запиту підтвердження говорить, що таблиця не існує. Це підтверджує наше виконання наведеного вище оператора DROP, щоб скинути таблицю.
Запит:
DROP TABLE employees_history ;
Команда обрізання MySQL
Ми вже обговорювали видалення всіх записів із таблиці за допомогою команди DELETE. Те саме можна було досягти, використовуючи також оператор TRUNCATE.
У цьому прикладі давайте заново створимо таблицю staff_history і повторно заповнимо її даними. Т ось два запити, які були виконані для повторного створення таблиці та її повторного заповнення:
Запит:
CREATE TABLE employees_history LIKE employees ; INSERT INTO employees_history (SELECT * FROM employees) ;
Ось так тепер виглядає таблиця staff_history з даними.
Далі ми видалимо всі записи з цієї таблиці за допомогою оператора TRUNCATE.
Як показано на малюнку, запит виконано успішно. Якщо ви уважно подивитесь на частину 'Повідомлення', то виявите, що в ній написано '0 рядків, що вплинули'. Однак ми знаємо, що ця таблиця містить 15 рядків. Тоді як це, показує нуль?
Причина: Оператор truncate не має значення підрахувати, на скільки рядків впливає його виконання. Це просто спорожнює стіл. Це одна із суттєвих відмінностей між операторами DELETE та TRUNCATE.
Давайте перевіримо виконання оператора TRUNCATE, виконавши запит SELECT у таблиці staff_history.
Як показано на малюнку вище, запит не повернув жодного рядка, а також усі стовпці відображають значення NULL, маючи на увазі, що виконаний нами раніше оператор TRUNCATE видалив усі записи з таблиці.
Запит:
TRUNCATE TABLE employees_history ;
Різниця між операторами TRUNCATE та DELETE
Пане Ні | ВИДАЛИТИ | ЗРУЧИТИ |
---|---|---|
1 | Це DML (мова керування даними). | Це DDL (мова визначення даних). |
два | Будь-який тригер AFTER DELETE у таблиці активується, коли ми використовуємо команду DELETE. | Жоден тригер ПІСЛЯ ВИДАЛЕННЯ в таблиці не активується, коли ми використовуємо команду TRUNCATE. |
3 | Запис можна видалити, навіть якщо існують обмеження зовнішнього ключа. | Записи з таблиці не можуть бути усічені, якщо є обмеження зовнішнього ключа. |
4 | Повторна ініціалізація таблиці не відбудеться. | Таблиця буде повторно ініціалізована. |
5 | Може використовуватися речення WHERE. | Застереження WHERE не можна використовувати. |
6 | Це видаляє один запис за раз і зберігає загальну кількість видалених записів у журналах. | Він видаляє всі записи відразу і не веде облік кількості видалених записів. |
Посилальна цілісність та її вплив на ВИДАЛЕННЯ
Перш ніж ми будемо, давайте подивимось що таке референційна цілісність, обмеження щодо RI чи іноземних ключів?
Обмеження зовнішнього ключа стосуються встановлення взаємозв'язку або зв'язку між батьківською та дочірньою таблицями. Це допомагає у перехресних посиланнях на дані в таблицях, які пов’язані між собою. Одна батьківська таблиця може мати кілька дочірніх таблиць і навпаки.
Наприклад, дві таблиці, які ми обговорювали дотепер, тобто співробітники та підрозділи, пов'язані між собою за допомогою обмеження зовнішнього ключа. Це обмеження встановлюється шляхом створення одного стовпця, як правило, первинного ключа, як стовпця ключа, що пов'язує дві таблиці.
Стовпець deptNum у таблиці відділу був зв’язаний зі стовпцем deptNum у таблиці працівника. У цьому випадку департаменти є батьківською таблицею, а співробітники - дочірньою таблицею.
Але як це впливає на твердження DELETE?
У MySQL або в будь-якій базі даних існують певні сценарії, які слід обробляти під час видалення записів з батьківської або дочірньої таблиць.
Існує кілька варіантів посилань, які ми можемо обговорити:
# 1) НА ВИДАЛИТИ КАСКАД: Правило говорить, що ми не можемо видалити рядок з батьківської таблиці, якщо в ньому є посилання або є відповідний рядок у будь-якій з дочірніх таблиць. Однак, якщо батьківська таблиця має досить багато дочірніх таблиць, то виснажливе завдання спочатку видалити записи з кожної дочірньої таблиці, а потім з батьківської таблиці.
Для цього існує обхідний шлях під назвою 'УДАЛИТИ КАСКАД'. Це один пункт, який додається до оператора CREATE кожної з дочірніх таблиць. Отже, щоразу, коли ми кажемо видалити рядок з батьківської таблиці, тоді механізм MySQL спочатку визначає посилання на цей рядок у дочірніх таблицях і видаляє ці записи і нарешті видалить запис із батьківської таблиці.
# 2) НІЯКИХ ДІЙ: Це варіант за замовчуванням. Якщо виконання оператора DELETE намагається видалити запис, який має посилання в будь-якій з дочірніх таблиць, тоді за допомогою цієї опції виконання оператора зупиниться, і Транзакція MySQL буде повернуто до останньої точки коміту.
# 3) ОБМЕЖЕННЯ: Функціонування RESTRICT та NO ACTION однакові. Це зупинить виконання та видасть відкат.
# 4) ВСТАНОВИТИ НУЛЬ: Якщо виконання оператора delete намагається видалити запис, який має посилання в будь-якій з дочірніх таблиць, тоді ця опція оновить значення стовпця у всіх дочірніх таблицях як NULL і після закінчення видалить запис із батьківського таблиця.
# 5) Встановити за замовчуванням: Якщо при виконанні оператора DELETE намагається видалити запис із посиланнями в будь-якій з дочірніх таблиць, тоді ця опція оновить значення стовпців до значення за замовчуванням, як визначено в операторі CREATE таблиці.
Часті запитання та відповіді
Q # 1) Як видалити дані з таблиці в MySQL?
Відповідь: Синтаксис команди delete для видалення лише вибраного рядка даних наведено нижче.
DELETE FROM table_name WHERE condition;
Q # 2) Як видалити всі дані з таблиці в MySQL?
Відповідь: Синтаксис команди DELETE для видалення всіх рядків з таблиці:
DELETE * FROM table_name;
Q # 3) Як видалити таблицю з бази даних у MySQL?
Відповідь: За допомогою команди drop можна видалити таблицю з бази даних. Користувач може замінити ім'я таблиці на таблицю, яку потрібно видалити.
DROP TABLE table_name;
Q # 4) Як видалити базу даних у MySQL?
Відповідь: Команда drop може бути використана для видалення бази даних.
DROP Database db_name;
Користувачі можуть замінити db_name на ім'я бази даних, яке потрібно видалити.
Q # 5) Що таке ВИДАЛЕННЯ КАСКАДУ в MySQL?
Відповідь: Коли батьківський запис видаляється, ON DELETE CASCADE створює відповідний дочірній запис, який потрібно видалити. Таким чином, ефект видалення каскадується від батьків до дитини. Це може бути корисним при виконанні видалення декількох таблиць.
Q # 6) Чому TRUNCATE розглядається як оператор DDL?
Відповідь: Оператор TRUNCATE фактично видаляє та відтворює таблицю разом з метаданими таблиці. Таким чином, це заява DDL.
Q # 7) Чи можна TRUNCATE відкотити назад?
Відповідь: Ні, TRUNCATE - це оператор автофіксації, якщо він виконується автономно. Це означає, що його неможливо відкотити назад, оскільки коміт також виконується разом із ним. Але якщо це частина транзакції, її можна відкотити за допомогою файлів журналу SQL.
Q # 8) Чи можна скасувати оператори DELETE назад?
Відповідь: Так, оператори DELETE можна відкотити. Просто виконайте команду ROLLBACK перед виконанням COMMIT.
Q # 9) Чи можна видалити стовпець за допомогою команди DELETE?
Відповідь: Додавання або видалення стовпців - це команди DDL. Для видалення стовпця з таблиці слід використовувати оператор ALTER.
Висновок
У цьому посібнику ми вивчили різні способи виконання операторів DELETE у MySQL.
веб-сайт, який перетворює відео з YouTube на mp3
У двох словах ми побачили:
- MySQL Видалити один рядок
- Видалити MySQL, використовуючи пункт ПОРЯДОК І обмеження
- MySQL Delete за допомогою пункту вибору
- MySQL Видалити цілу таблицю
- Обрізання MySQL
- Різниця між операторами TRUNCATE та DELETE
- Референсна цілісність та її вплив на ВИДАЛЕННЯ
Ми можемо використовувати будь-що з наведеного вище, виходячи з вимоги.
Щасливого читання !!
Рекомендована література
- Синтаксис команд Unix Cat, варіанти з прикладами
- Команда сортування Unix із синтаксисом, опціями та прикладами
- MySQL Insert Into Table - Вставте синтаксис заяви та приклади
- MongoDB Оновлення та видалення документа з прикладами
- Вирізати команду в Unix з прикладами
- Нові / Видалити оператори в C ++ з прикладами
- Підручник із заяв на оновлення MySQL - Синтаксис та приклади оновлення запитів
- Команда Ls в Unix з прикладами