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

omdøbning af et låst bord

Mens Rick generelt har ret i at bruge Percona-værktøjerne (se 1 og 2 ), svaret på spørgsmålet er virkelig at bruge ALTER TABLE . Jeg tænkte RENAME var bare et alias - men det ser ud til, at det ikke er tilfældet .

Test synes at indikere, at dette virker OK:

CREATE TABLE foo_new (...)

-- copy data to new table, might take very long
INSERT INTO foo_new (id,created_at,modified_at)
  SELECT * FROM foo WHERE id <= 3;

LOCK TABLES foo WRITE, foo_new WRITE;

-- quickly copy the tiny rest over
INSERT INTO foo_new (id,created_at,modified_at)
  SELECT * FROM foo WHERE id > 3;

-- now switch to the new table
ALTER TABLE foo RENAME TO foo_old;
ALTER TABLE foo_new RENAME TO foo;

UNLOCK TABLES;


  1. Indsæt, ved dubletopdatering i PostgreSQL?

  2. hvordan man finder indekser på en tabel i oracle

  3. Django:Hvad er den bedste praksis for at migrere et projekt fra sqlite til PostgreSQL

  4. Oprettelse af funktioner i phpMyAdmin - Fejl:adgang nægtet, du har brug for superprivilegiet til denne handling