0

そうです、id、title、description、keywords、linkのフィールドを持つテーブルがあります。表には、検索エンジン用の何百ものWebサイトがあります。このセクションでは苦労しています。idは自動インクリメントに設定されており、テーブル全体で調整するためのidタグ(自動インクリメント)を使用して、テーブルの中央のどこかに自分自身を埋め込むコード行を追加できるようにしたいと思います。したがって、「Google」をID「81」に追加すると、81は82に移動して調整します。SQLでそれを行う方法はありますか?

4

1 に答える 1

0

AUTO_INCREMENTあなたが使いたいように使うことを意図したものではありません。主に、他のテーブルで外部キーとして使用されることを主な目的として、テーブル内の任意の 1 行への参照にすぎません。行を特定の方法で並べ替えたい場合は、影響を与えることができる別の列が必要です。

編集:

ただし、本当に番号を付け直したい場合に備えて、自動インクリメント ID は他のテーブルで参照用に使用されておらず、現在誰もテーブルを使用していません。

  • ID列を削除します
  • auto_increment なしで ID 列を追加します
  • 「Google」の ID を 81 に更新します
  • ID 列を再度 auto_increment に変更します

多分このように

alter table mywebsitetable drop column id;

alter table mywebsitetable add column id bigint;

update mywebsitetable set id = 81 where websitename = 'Google';

... do more numbering as you like and this does give numbers to all the other rows:

alter table ify.test modify id bigint primary key auto_increment; 

すべての ID を保持したい場合は、別の列を追加して ID 列を保存し、2 つの更新ステートメントでそれらをコピーすることもできます。81 より前の ID の 1 つの更新と、ID をインクリメントしている 81 の後の別の更新。次に、ドロップを追加して列を追加し、保存列から ID をコピーし、保存列を削除し、Google を追加して、auto_increment を再度オンにします。ただし、テーブルが大きい場合、これには時間がかかります。前に述べたように、自動インクリメントは順序付けを目的としていないため、またはその 1 つのコメントで述べたように、auto_increment はスプレッド内の行のように扱われることは想定されていないため、これはお勧めしません。シート。

于 2012-08-10T17:04:14.597 に答える