web-dev-qa-db-ja.com

データ型の変更?

行が1時間ごとに挿入されるテーブルがあります。この行には、idinstallationproduct_id、およびhit_allowedが含まれています。それらはすべて最初はmediumintでした。しかし、数日前にidが制限に達し、データ型をbigintに変更する必要がありました。

しかし、それ以降、これらの行が入力されるスクリプトは、product_idの入力を停止しました。スクリプトに変更は加えられていません。私もそのデータ型を変更する必要があるかどうか誰かに教えてもらえますか?

2
vinny

次のクエリを実行してください

SELECT product FROM mytable PROCEDURE ANALYSE();

PROCEDURE ANALYSE() は、最小値、最大値、および必要なデータ型を通知します。

Product_idがmediumintで、product_idの最大値が16777215の場合、最大値に達しました。 BIGINTではなくINTUNSIGNEDに変更します。

ALTER TABLE mytable MODIFY COLUMN product_id INT UNSIGNED NOT NULL;

更新2012-06-1316:06 EDT

別の方法で変更をインポートしてみてください。

CREATE TABLE pb_stat_rule_new LIKE pb_stat_rule;
ALTER TABLE pb_stat_rule_new MODIFY COLUMN product_id INT UNSIGNED NOT NULL;
INSERT INTO pb_stat_rule_new SELECT * FROM pb_stat_rule;
ALTER TABLE pb_stat_rule RENAME pb_stat_rule_old;
ALTER TABLE pb_stat_rule_new RENAME pb_stat_rule;

新しいファイルを試してください。それでも問題が解決しない場合は、これを元に戻すことができます。

ALTER TABLE pb_stat_rule RENAME pb_stat_rule_zap;
ALTER TABLE pb_stat_rule_old RENAME pb_stat_rule;
DROP TABLE pb_stat_rule_zap;
3
RolandoMySQLDBA