Oracle
 sql >> база данни >  >> RDS >> Oracle

Да се ​​изтрият ли всички записи с изключение на най-новия?

DELETE FROM student
WHERE ApplicationDateTime <> (SELECT max(ApplicationDateTime) 
                              FROM student s2
                              WHERE s2.StudentID  = student.StudentID)

Предвид дългата дискусия в коментарите, моля, обърнете внимание на следното:

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

Бази данни, в които определено знам, че това работи правилно дори с едновременни модификации на таблицата:Oracle (този, за който е този въпрос), Postgres, SAP HANA, Firebird (и най-вероятно MySQL, използващ InnoDB). Тъй като всички те гарантират последователен изглед на данните в момента, когато е започнало изявлението. Промяна на <> до < няма да промени нищо за тях (включително Oracle, за който е този въпрос)

За посочените по-горе бази данни изявлението е не подлежи на ниво на изолация, тъй като фантомни четения или неповтарящи се четения могат да се случат само между множество изявления - не в рамките на единичен изявление.

За база данни, която не имплементира правилно MVCC и разчита на заключване за управление на паралелността (по този начин блокира едновременния достъп до запис), това всъщност може да доведе до грешни резултати, ако таблицата се актуализира едновременно. За тези заобиколно решение с помощта на < вероятно е необходимо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle позволява ли опцията за четене без ангажимент?

  2. Свързване към база данни на Oracle с помощта на SQLAlchemy

  3. Получаване на ORA-03115:неподдържан мрежов тип данни или грешка при представяне при извличане на масив от varchar от анонимен pl/sql

  4. RMAN Избройте команди за архивиране

  5. Как се свързвате с LDAP сървър с помощта на node-oracledb?