जबकि सामान्य तौर पर रिक पेरकोना टूल्स का उपयोग करने के लिए सही है (देखें 1
और 2
), प्रश्न का उत्तर वास्तव में ALTER TABLE
. का उपयोग करना है . मैंने सोचा RENAME
सिर्फ एक उपनाम था - लेकिन ऐसा लगता है कि ऐसा नहीं है
।
ऐसा लगता है कि परीक्षण से पता चलता है कि यह ठीक काम करता है:
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;