sql >> Database teknologi >  >> RDS >> Mysql

Sådan tjekker du i realtid, om en ny række blev tilføjet til MySQL-tabellen

Hvis dit bord er MyISAM, ville jeg holde fast i din oprindelige idé. At få rækkeantallet fra en MyISAM-tabel er øjeblikkeligt. Det kræver kun læsning af en enkelt værdi, da MyISAM opretholder rækkeantallet til enhver tid.

Med InnoDB kan denne tilgang stadig være acceptabel. Forudsat car_table.id er primærnøgle, SELECT COUNT(id) FROM car_table kræver kun en indeksscanning, som er meget hurtig. Du kan forbedre denne idé ved at tilføje endnu en indekseret boolesk kolonne til din tabel:

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

Standardværdien sikrer, at nye biler vil blive indsat med dette flag sat til 0 uden at ændre indsættelsessætningen. Så:

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;

På denne måde scanner du kun et meget lille antal indeksposter ved hver afstemning.

En mere avanceret tilgang består i at tilføje nyoprettede bilers ID'er i et sidebord gennem en trigger. Dette sidebord scannes nu og da uden at låse hovedbordet og uden at ændre dets struktur. Simpelthen TRUNCATE denne sidetabel efter hver afstemning.

Endelig er der mulighed for at udløse en UDF, som foreslået af Panagiotis, men dette ser ud til at være en overkill i de fleste situationer.



  1. Sådan replikeres MySQL-database til en anden server

  2. MariaDB og Docker use cases, del 1

  3. Skrive SQL-forespørgslen for at finde elever, der er tilmeldt enheder, der tilbydes på et sted?

  4. Brug af en IN-klausul med MySQL med angivne værdier