Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego ta aktualizacja MySQL nie działa?

Zapytanie kończy się niepowodzeniem, ponieważ nie możesz zmodyfikować tabeli i wybrać z tej samej tabeli w podzapytaniu.

Zobacz Składnia podzapytań

Myślę, że można to obejść za pomocą sztuczek JOIN:

UPDATE meterreadings AS tgt
INNER JOIN (
  SELECT * FROM meterreadings
  WHERE meterreadingtype_id = 2
  ) AS src
ON tgt.meterreadingdate = src.meterreadingdate
   AND tgt.location_id = src.location_id
   AND tgt.created = src.created
   AND tgt.asset_id = src.asset_id
SET tgt.meterreading = src.meterreading

Nie jestem ekspertem MySQL, ale wierzę, że to działa, ponieważ MySQL najpierw przetwarza podzapytanie i przechowuje wynik w pamięci jako tabela tymczasowa, która nie zmienia się podczas aktualizacji. Efektem ubocznym tego jest to, że jeśli wynik podzapytania jest duży, pożresz mnóstwo (lub zabraknie) pamięci.

Jedynym sposobem (o ile wiem) na obejście problemu z pamięcią jest zmniejszenie podzapytania przy użyciu kryteriów, które nie są bezpośrednio związane z celem aktualizacji. Na przykład, jeśli chcesz wykonać te aktualizacje jako część procesu nocnego, spraw, aby wewnętrzny SELECT zwracał tylko wiersze utworzone w ciągu ostatnich ~24 godzin.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. @Column(unique=true) nie działa

  2. Przewodnik po projektowaniu bazy danych dla powiadomień w MySQL

  3. AKTUALIZUJ lub WSTAW MySQL Python

  4. Jak przestawić schemat encji-atrybutu-wartości MySQL?

  5. używanie wartości null w przygotowanym oświadczeniu mysqli