Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL und eine Tabelle sperren, lesen und dann abschneiden

Sie können eine Tabelle, die zum Schreiben gesperrt ist, nicht abschneiden. Dies liegt daran, dass „truncate“ „die Tabelle zerstören und eine neue mit demselben Schema neu erstellen“ bedeutet.

Sie können jedoch leeren Die Tabelle. Statt TRUNCATE TABLE asin_one_time_only Verwenden Sie DELETE FROM asin_one_time_only . Beachten Sie, dass dadurch die automatische Nummerierung nicht zurückgesetzt wird. Wenn Sie es auch zurücksetzen möchten, verwenden Sie ALTER TABLE asin_one_time_only auto_increment=1

Ich schlage vor, Folgendes zu tun:

LOCK TABLES asin_one_time_only READ;
SELECT asin FROM asin_one_time_only;
-- minimize the possibility of someone writing to the table in-between
-- an "UNLOCK TABLES" and a "LOCK TABLES" by just issuing a new LOCK TABLES
-- I am not 100% sure that MySQL will do this atomically, so there is a
-- possibility that you may delete a row that was not read.
-- If this is unacceptable, then use a "LOCK TABLES asin_one_time_only WRITE"
-- from the very beginning.
LOCK TABLES asin_one_time_only WRITE;
DELETE FROM asin_one_time_only;
ALTER TABLE asin_one_time_only auto_increment=1;
UNLOCK TABLES;