0

以下のような構造のテーブルがあります。

create table test_table (id INT NOT NUll AUTO_INCREMENT
                         , name varchar(100),
                         primary key (id))ENGINE=INNODB
Select * from test_table;
id   name
1    a
2    b
3    c

ここで、IDを数値でインクリメントしたいとします。たとえば2とすると、最終結果は次のようになります。

Select * from test_table;
id   name
3    a
4    b
5    c

私がそれを行う方法は、最初にPKを削除して自動インクリメントし、次にテーブルを更新することです。

update test_table set id=id+2;

もう1つの方法は、PKと自動インクリメントを使用せずに一時テーブルを作成し、その結果をメインテーブルに抽出することです。

テーブル構造を破壊せずにこれを行う他の方法はありますか?私はMYSQLを使用しています。

4

2 に答える 2

0

あなたの例でidは、更新の過程で(一時的な)重複を許可するために、最初にPKを削除する必要があります。重複を避けるために、順序付けられた更新を実行する必要があります。

UPDATE test_table SET id = id + 2 ORDER BY id DESC;

これにより、firstの最大値でレコードが更新されるidため、衝突が回避されます。

もちろん、の値をデクリメントする場合はid、「」を使用しますORDER BY id ASC

于 2012-11-29T08:58:17.113 に答える
0

SQLでテーブルを更新するためのクエリは次のとおりです:-その一般的な

UPDATE table_name SET column1=value, column2=value2,WHERE some_column=some_value;

詳細については、リンクをたどってください

クエリの更新

ありがとう、パヴァン

于 2012-11-29T09:26:18.050 に答える