主キーもauto_increment列もないテーブルを変更しようとしています。私は主キー列を追加する方法を知っていますが、データを主キー列に自動的に挿入できるかどうか疑問に思っていました(DBにすでに500行あり、IDを与えたいが、手動でそれをしたくない) 。何かご意見は?どうもありがとう。
ALTER TABLE
列を追加するPRIMARY KEY
ステートメントは、テストで正しく機能します。
ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;
テスト目的で作成された一時テーブルで、上記のステートメントはAUTO_INCREMENT
id
列を作成し、1から始まるテーブル内の既存の各行に自動インクリメント値を挿入しました。
id、noなどの自動インクリメントの列がない場合、次のクエリを使用して追加できます。
ALTER TABLE table_name ADD id int NOT NULL AUTO_INCREMENT primary key FIRST
列がある場合は、次のクエリを使用して自動インクリメントに変更します。
ALTER TABLE table_name MODIFY column_name datatype(length) AUTO_INCREMENT PRIMARY KEY
Multiple primary key defined
エラーが発生するような私の場合:
ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST NOT NULL;
MySQL v5.5.31では、これによりid
列が主キーとして設定され、各行に増分値が入力されました。
はい、このようなことはそれを行うでしょうが、最高ではないかもしれませんが、バックアップを作成したいかもしれません
$get_query = mysql_query("SELECT `any_field` FROM `your_table`");
$auto_increment_id = 1;
while($row = mysql_fetch_assoc($get_query))
{
$update_query = mysql_query("UPDATE `your_table` SET `auto_increment_id`=$auto_increment_id WHERE `any_field` = '".$row['any_field']."'");
$auto_increment_id++;
}
選択したany_field
は、更新時に同じでなければならないことに注意してください。
私が見つける最も簡単で迅速なのはこれです
ALTER TABLE mydb.mytable
ADD COLUMN mycolumnname INT NOT NULL AUTO_INCREMENT AFTER updated,
ADD UNIQUE INDEX mycolumnname_UNIQUE (mycolumname ASC);
これらの命令を適応させるには、既存非増分主キーを持つテーブルを取り、増分主キーをテーブルに追加し、古いキーと新しいキーの両方で新しい複合主キーを作成しました次のコードを使用した複合主キー:
DROP TABLE IF EXISTS SAKAI_USER_ID_MAP;
CREATE TABLE SAKAI_USER_ID_MAP (
USER_ID VARCHAR (99) NOT NULL,
EID VARCHAR (255) NOT NULL,
PRIMARY KEY (USER_ID)
);
INSERT INTO SAKAI_USER_ID_MAP VALUES ('admin', 'admin');
INSERT INTO SAKAI_USER_ID_MAP VALUES ('postmaster', 'postmaster');
ALTER TABLE SAKAI_USER_ID_MAP
DROP PRIMARY KEY,
ADD _USER_ID INT AUTO_INCREMENT NOT NULL FIRST,
ADD PRIMARY KEY ( _USER_ID, USER_ID );
これが完了すると、_USER_IDフィールドが存在し、主キーのすべての数値が期待どおりになります。上部の「ドロップテーブル」を使用すると、これを何度も実行して、バリエーションを試すことができます。
私が仕事をすることができなかったのは、USER_IDフィールドを既に指している着信外部キーがある状況です。別のテーブルから受信する外部キーを使用して、より複雑な例を実行しようとすると、このメッセージが表示されます。
#1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150)
ALTERテーブルを実行する前にすべての外部キーを破棄し、その後それらを再構築する必要があると思います。しかし今のところ、他の人がこの状況に遭遇した場合に備えて、このソリューションを元の質問のより挑戦的なバージョンに共有したかったのです。
ALTER TABLE tableName MODIFY tableNameIDMEDIUMINT NOT NULL AUTO_INCREMENT;
ここでtableNameはテーブルの名前、
tableNameプライマリである列名は変更する必要があります
MEDIUMINTは、既存の主キーのデータ型です
AUTO_INCREMENT nullではない後にauto_incrementだけを追加する必要があります
主キーをauto_incrementにします......
これが役に立てば幸いです:)
私は同じ問題に直面していたので、主キーのフィールドを削除してから再作成し、自動増分であることを確認しました。それは私のために働いた。他の人にも役立つことを願っています
次のコマンドを使用して、シーケンス番号を持つことができる既存のテーブルに新しい主キー列を追加できます。
ALTER TABLE mydb.mytable ADD pk_columnName INT IDENTITY
テーブルをエクスポートし、テーブルを空にして、一意のINTとしてフィールドを追加し、それをAUTO_INCREMENTに変更してから、以前にエクスポートしたテーブルを再度インポートします。