PostgreSQL ИЗТРИВАНЕ НА редове от избраното

⚡ Умно обобщение

PostgreSQL DELETE премахва един или повече редове от таблица, а сдвояването му с клауза WHERE се отнася само за записите, които отговарят на условие, докато пропускането на WHERE изчиства всеки ред в таблицата.

  • 📋 Синтаксис: Условието DELETE FROM table WHERE премахва съвпадащите редове, а RETURNING може да изведе изтритите данни.
  • 🎯 Едно условие: Една единствена клауза WHERE изтрива само редовете, които отговарят на един критерий.
  • Две условия: Свързването на два теста с AND стеснява изтриването до точни редове.
  • 🔗 Клауза EXISTS: EXISTS изтрива редове в една таблица въз основа на съвпадащи записи в друга таблица.
  • pgAdmin: Същите заявки за изтриване се изпълняват визуално чрез редактора на заявки pgAdmin.
  • 🤖 Безопасност на изкуствения интелект: Асистентите с изкуствен интелект добавят правилната клауза WHERE и предупреждават преди изтриване на цялата таблица.

PostgreSQL Изтриване на редове от избраното

Изтриване на заявка в PostgreSQL

- Изявление за изтриване in PostgreSQL се използва за изтриване на един или повече записи от таблица. За да изтриете само избрани редове от таблица, PostgreSQL позволява ви да комбинирате оператора DELETE с клаузата WHERE; в противен случай изтрива всички записи в таблицата.

PostgreSQL Синтаксис на заявката за изтриване

Изразът DELETE може да бъде дефиниран, използвайки синтаксиса по-долу:

[ WITH [ RECURSIVE ] with-query [, ...] ]
DELETE FROM [ ONLY ] table-name [ * ] [ [ AS ] alias ]
    [ USING using-list ]
    [ WHERE condition(s) | WHERE CURRENT OF cursor-name]
    [ RETURNING * | output-expression [ [ AS ] output-name] [, ...] ]

параметри

Налични са следните параметри:

  • със заявка: клаузата WITH ви позволява да се обърнете към една или повече подзаявки по име в заявката DELETE.
  • име на таблица: името на таблицата, от която трябва да се изтрият записи.
  • псевдоним: заместител на името на целевата таблица.
  • списък с използване: таблични изрази, които позволяват използването на колони от други таблици в клаузата WHERE.
  • състояние(я): незадължително. Това са условията, които трябва да бъдат изпълнени, за да бъдат изтрити записите. Ако този раздел не е предоставен, всички записи с имена на таблици ще бъдат изтрити.
  • име на курсора: курсорът, който ще се използва в условието WHERE CURRENT OF. Последният ред, извлечен от този курсор, ще бъде изтрит.
  • изходен израз: изразът, който ще бъде обработен и върнат от оператора DELETE след изтриване на всеки ред.
  • изходно име: името, което да се използва за върнатата колона.

Обърнете внимание, че тъй като командата DELETE изтрива целия ред, не е необходимо да посочвате имената на колоните.

PostgreSQL Изтриване на заявка с едно условие

Изразът DELETE може да се използва с едно условие, което се задава с помощта на клаузата WHERE. Да разгледаме таблицата Price със следните данни:

Цена:

PostgreSQL Изтриване на заявка с едно условие

Нека изтрием записа с id 4:

DELETE FROM Price
WHERE id = 4;

Горната команда изтрива записите, в които идентификаторът е 4. Нека потвърдим дали изтриването е било успешно:

PostgreSQL Изтриване на заявка с едно условие

Редът с id 4 е изтрит.

Изтриване на заявка с две условия

- PostgreSQL Изразът DELETE може да приема и две условия. Двете условия трябва да бъдат свързани с оператора AND. Ще използваме следната таблица:

Цена:

PostgreSQL Изтриване на заявка с две условия

Разгледайте примера, даден по-долу:

DELETE FROM Price
WHERE id = 3
AND price = 300;

В горната команда изтриваме реда, в който идентификаторът е 3, а цената е 300. Сега можем да направим заявка към таблицата:

SELECT * FROM Price;

Това връща следното:

PostgreSQL Изтриване на заявка с две условия

Записът с id 3 и цена 300 беше изтрит.

PostgreSQL Изтриване на заявка с помощта на условие EXISTS

С СЪЩЕСТВУВА условие, можете да направите DELETE по-сложно. Понякога може да се наложи да изтриете записи в една таблица въз основа на записи в друга таблица.

Тъй като клаузата FROM не позволява изброяване на записи от повече от една таблица при извършване на изтриване, клаузата EXISTS става много полезна. Имаме следните две таблици:

Книга:

PostgreSQL Изтриване на заявка с помощта на условие EXISTS

Цена:

PostgreSQL Изтриване на заявка с помощта на условие EXISTS

След това можем да изпълним следната заявка:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

Командата изтрива редове от таблицата „Book“, които имат съответстващ идентификатор в таблицата „Price“ с цена под 250.

Таблицата на книгата вече е както следва:

PostgreSQL Изтриване на заявка с помощта на условие EXISTS

Записът с идентификатор 1 беше изтрит.

Как да изтриете ред в PostgreSQL използвайки pgAdmin

Същите заявки за изтриване могат да се изпълняват и визуално чрез интерфейса на pgAdmin, като се следват стъпките по-долу:

С едно условие

Стъпка 1) Влезте в профила си в pgAdmin. Отворете pgAdmin и влезте в профила си, използвайки вашите идентификационни данни.

Стъпка 2) Създайте демо база данни.

  1. От лентата за навигация вляво щракнете върху Бази данни.
  2. Щракнете върху Демо.

Изтриване на ред в PostgreSQL използвайки pgAdmin

Стъпка 3) Въведете следната заявка в редактора на заявки:

DELETE FROM Price
WHERE id = 4;

Стъпка 4) Щракнете върху бутона Изпълнение.

Изтриване на ред в PostgreSQL използвайки pgAdmin

Стъпка 5) Нека проверим дали редът е изтрит:

Изтриване на ред в PostgreSQL използвайки pgAdmin

С две условия

Стъпка 1) Влезте във вашия pgAdmin акаунт.

Стъпка 2)

  1. От лентата за навигация вляво щракнете върху Бази данни.
  2. Щракнете върху Демо.

Изтриване на ред в PostgreSQL използвайки pgAdmin

Стъпка 3) Въведете заявката в редактора на заявки:

DELETE FROM Price
WHERE id = 3
AND price = 300;

Стъпка 4) Щракнете върху бутона Изпълнение.

Изтриване на ред в PostgreSQL използвайки pgAdmin

Стъпка 5) Нека проверим дали изтриването е било успешно:

Изтриване на ред в PostgreSQL използвайки pgAdmin

Използване на условие EXISTS

Стъпка 1) Влезте във вашия pgAdmin акаунт.

Стъпка 2)

  1. От лентата за навигация вляво щракнете върху Бази данни.
  2. Щракнете върху Демо.

Изтриване на ред, използвайки условието EXISTS в pgAdmin

Стъпка 3) Въведете заявката в редактора на заявки:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

Стъпка 4) Щракнете върху бутона Изпълнение.

Изтриване на ред, използвайки условието EXISTS в pgAdmin

Стъпка 5) Нека проверим дали изтриването е било успешно:

Изтриване на ред, използвайки условието EXISTS в pgAdmin

Изтеглете базата данни, използвана в този урок

Въпроси и Отговори

TRUNCATE премахва всеки ред незабавно и нулира паметта, но игнорира WHERE и тригерите за ред. DELETE премахва избрани редове, използвайки клауза WHERE, задейства тригери за редове и може да бъде отменена в рамките на транзакция.

Добавете клауза USING: DELETE FROM member USING denylist WHERE member.phone = denylist.phone. Тя свързва втората таблица и изтрива съответстващите редове, давайки същия резултат като EXISTS с по-ясен синтаксис в стил join.

RETURNING извежда колони от редовете, току-що изтрити в същия оператор. Напишете DELETE FROM Price WHERE id = 4 RETURNING * и PostgreSQL връща премахнатите данни, така че приложенията да могат да регистрират или потвърдят промяната.

Да. Обгърнете DELETE в транзакция с BEGIN, след което изпълнете ROLLBACK, за да я отмените, или COMMIT, за да я запазите. Докато не извършите commit, премахнатите редове могат да бъдат възстановени, което предпазва от погрешно изтриване.

Запазете по едно копие на група, като използвате скритата колона ctid: DELETE FROM Price a USING Price b WHERE a.ctid < b.ctid AND a.id = b.id. Това премахва дублиращите се редове, като същевременно запазва един запис.

Първо изпълнете същия филтър като SELECT или отворете транзакция с BEGIN и използвайте RETURNING, за да проверите засегнатите редове. RevПрегледът на резултата WHERE преди COMMIT предотвратява изтриването на повече редове от предвиденото.

Асистентите с изкуствен интелект превеждат правилата на обикновен английски в DELETE с правилната клауза WHERE, предлагат EXISTS или USING за изтриване между таблици и маркират оператори, на които липсва условие, което би изчистило цялата таблица.

Да. AI Copilot преглежда всяко изтриване (DELETE), предупреждава, когато няма клауза WHERE, и препоръчва транзакция или преглед RETURNING, намалявайки риска от случайно изтриване на цялата таблица.

Обобщете тази публикация с: