7

2,100 万行のテーブルがあります。行名の 1 つを変更する必要があります。クエリ「alter table company change id new_id int(11)」を試してみると、クエリは終了しません。

大きなmysqlテーブルのフィールド名を変更する簡単な方法はありますか?

4

5 に答える 5

5

まず、何よりもまず、テーブルをバックアップします。

mysqldump -uroot -p db big_table > /tmp/big_table.backup.sql

ALTER コマンドを実行する際に留意すべきことの 1 つは、変更したくない変更の列の詳細が同じであることを絶対に確認することです。

たとえば、次のようになります。

ALTER TABLE big_table MODIFY COLUMN id INT(11)

AUTO_INCREMENTやのようなものはスキップしますNOT NULL。したがって、それもalterステートメントに含めるのが最善です。

ALTER TABLE big_table MODIFY COLUMN id INT(11) NOT NULL AUTO_INCREMENT;

基本的には、ID 列の create ステートメント領域をコピーし、必要なものを置き換えて、それを変更ステートメントに含めるだけです。

于 2012-12-07T21:45:28.337 に答える
5

pt-online-schema-change を使用して、テーブルから自分自身をロックアウトすることなく、長時間実行される ALTER TABLE の変更を行います。

http://www.percona.com/doc/percona-toolkit/pt-online-schema-change.html

通常、変更を完了するにはさらに時間がかかりますが、作業中にテーブルから読み書きすることはできます。

また、著者のウェビナーを聞いて、その仕組みと注意事項について説明しています。

http://www.percona.com/webinars/2012-05-02-zero-downtime-schema-changes-in-mysql

于 2012-12-09T21:32:46.070 に答える
1

次のように簡単に実行できます。

MyISAM テーブル

CREATE TABLE big_table_new LIKE big_table;
ALTER TABLE big_table_new MODIFY COLUMN id INT(11);
ALTER TABLE big_table_new DISABLE KEYS;
INSERT INTO big_table_new SELECT * FROM big_table;
ALTER TABLE big_table_new ENABLE KEYS;
ALTER TABLE big_table RENAME big_table_bak;
ALTER TABLE big_table_new RENAME big_table;

InnoDB テーブル

CREATE TABLE big_table_new LIKE big_table;
ALTER TABLE big_table_new MODIFY COLUMN id INT(11);
INSERT INTO big_table_new SELECT * FROM big_table;
ALTER TABLE big_table RENAME big_table_bak;
ALTER TABLE big_table_new RENAME big_table;

完了したらbig_table_bak、バックアップです。

新しいものに満足している場合は、big_table実行できます

DROP TABLE big_table_bak;

元に戻したい場合は、実行できます

DROP TABLE big_table;
ALTER TABLE big_table_bak RENAME big_table;

試してみる !!!

于 2012-12-07T22:54:38.517 に答える
1

巨大な Mysql テーブルのフィールドの名前を変更するための時間のかからない方法は次のとおりです。

CREATE TABLE new_big_table SELECT id as new_id,field1,field2,field3 FROM big_table.

于 2012-12-09T21:23:46.460 に答える
0

についてどう思いますか:

  1. すべてのデータをエクスポートしてテーブルを切り捨てる
  2. 他の机
  3. エクスポートされたファイルの行の名前を変更
  4. インポートファイル

これは簡単なアイデアですが、高速ではありません (エクスポート/インポート)。

または、夜間の数時間のメンテナンス中に ALTER を実行してみますか? :)

于 2012-12-07T21:38:54.403 に答える