sql >> Databáze >  >> RDS >> Oracle

atomové srovnání a swap v databázi

Je PK primární klíč? Pak to není problém, pokud již znáte primární klíč, neexistuje žádný sport. Pokud pk je primární klíč, pak to vyvolává zřejmou otázku jak znáte pk položky, kterou chcete vyřadit...

Problém je, pokud neděláte znáte primární klíč a chcete vyřadit z fronty další „dostupný“ (tj. status =y) a označit jej jako vyřazený (smazat jej nebo nastavit status =z).

Správný způsob, jak toho dosáhnout, je použít jeden příkaz. Bohužel se syntaxe mezi Oracle a SQL Serverem liší. Syntaxe SQL Serveru je:

update top (1) [<table>]
set status = z 
output DELETED.*
where  status = y;

Nejsem dostatečně obeznámen s klauzulí RETURNING společnosti Oracle, abych uvedl příklad podobný SQL OUTPUT.

Jiná řešení SQL Server vyžadují, aby byly rady pro zamykání na SELECT (s UPDLOCK) správné. V Oracle je preferovanou cestou použití FOR UPDATE, ale to na SQL Server nefunguje, protože FOR UPDATE se má používat ve spojení s kurzory v SQL. .

V každém případě chování, které máte v původním příspěvku, je nesprávné. Více relací může všechny vybrat stejný řádek (řádky) a dokonce je všechny aktualizovat a vrátit stejnou vyřazenou položku (položky) více čtenářům.



  1. MySQL:Mohu provést levé spojení a vytáhnout pouze jeden řádek z tabulky spojení?

  2. MongoDB nebo MySQL nebo obojí v aplikaci Rails

  3. AES_DECRYPT() a AES_ENCRYPT() v MySQL s polskými znaky

  4. Jsou levé vnější spoje a levé spoje stejné?