sql >> Databáze >  >> RDS >> Mysql

Jak zkontrolovat v reálném čase, zda byl do tabulky MySQL přidán nový řádek

Pokud je váš stůl MyISAM, držel bych se vašeho původního nápadu. Získání počtu řádků z tabulky MyISAM je okamžité. Vyžaduje pouze čtení jedné jediné hodnoty, protože MyISAM neustále udržuje počet řádků.

S InnoDB může být tento přístup stále přijatelný. Za předpokladu car_table.id je primární klíč, SELECT COUNT(id) FROM car_table vyžaduje pouze skenování indexu, které je velmi rychlé. Tento nápad můžete vylepšit přidáním dalšího indexovaného booleovského sloupce do tabulky:

ALTER car_table ADD COLUMN checked BOOLEAN NOT NULL DEFAULT 0, ADD INDEX (checked);

Výchozí hodnota zajišťuje, že nová auta budou vložena s tímto příznakem nastaveným na 0, aniž by došlo k úpravě příkazu vkládání. Potom:

BEGIN TRANSACTION; -- make sure nobody interferes
SELECT COUNT(checked) FROM car_table WHERE checked = FALSE FOR UPDATE; -- this gets you the number of new, unchecked cars
UPDATE car_table SET checked = TRUE WHERE checked = FALSE; -- mark these cars as checked
COMMIT;

Tímto způsobem skenujete pouze velmi malý počet položek rejstříku při každém dotazování.

Pokročilejší přístup spočívá v přidávání nově vytvořených ID aut do postranní tabulky pomocí spouště. Tento postranní stůl je každou chvíli skenován, aniž by se zamykal hlavní stůl a neměnila se jeho struktura. Jednoduše TRUNCATE tuto postranní tabulku po každém hlasování.

Konečně je tu možnost spuštění UDF, jak navrhuje Panagiotis, ale to se zdá být ve většině situací přehnané.



  1. Převeďte nový řádek na XML v rámci Oracle Trigger

  2. Získejte jméno vlastníka DB v PostgreSql

  3. int na řetězec v MySQL

  4. ORA-00904::neplatný identifikátor Oracle sql