1

請求書ごとに 1 つのレコードを格納する請求書テーブルがあり、id 列 ( int AUTO_INCREMENT) が主キーであり、請求書参照番号でもあります。

残念ながら、現在のシステムが使用する 4 桁の ID ではなく、5 桁の ID を持つ古いシステムで生成された請求書を手動で移行する必要がありました。

ただし、PhpMyAdmin (テーブル操作) を介して次の 4 桁の ID にリセットしAUTO_INCREMENTても、5 桁の 1 が挿入され、現在テーブルにある上位の ID に 1 を加えた値が挿入されます。

insert_id周りを検索すると、実際には ? だけでなくAUTO_INCREMENT?も変更する必要があるようです。ALTER TABLE invoices SET insert_id=8125同様に実行しようとしましALTER TABLE invoices insert_id=8125たが、これらのコマンドはどちらも有効ではないようです。

ID以降AUTO_INCREMENTのレコードを挿入するようにリセットできる正しい方法を誰かが説明できますか?そして、それが到達すると、手動で追加した4つのレコードをスキップし、それ以降の連続したIDを続行します. スキップしない場合-これは実際には問題ではありません。会社は毎年それほど多くの請求書を生成しないため、これは翌年に発生するため、問題が発生しないことを願っています.812510962109661096210966

私が見つけたこの厄介な状況で何か助けていただければ幸いです! どうもありがとう

4

1 に答える 1

1

PHPMyAdmin は、MySQL で使用するために作成された最悪の「アプリケーション」の 1 つであるため、最初に私が提案することは PHPMyAdmin を捨てることです。適切な GUI を取得します。私のお気に入りはSQLYogです。

それでは問題に進みます。主キーを決して改ざんしたり、あなたが言ったように「リセット」したり、データベースによって生成された整数を持つ列を更新したりしないでください。理由については、トピックは広く、別の質問で議論することができます.一度設定したら、決して主キーに触れないでください.

2 つ目は、誰かが請求書の記録を削除していたため、自動インクリメントが 8k+ ではなく 10k+ になっていることです。これは悪いことではありませんが、請求書に連続した値が必要な場合 (請求書 1 と 5 の間にギャップがあってはならないなど) は、sequence_id または Invoice_ref という追加のフィールドを使用し、トリガーを使用してその数を計算します。DELETE 操作で失われた数値を再利用する auto_increment 機能に依存しないでください。

または、使用しているデータベースをエクスポートしCREATE TABLE、invoices テーブルの定義を見つけて、「AUTO_INCREMENT = [some number]」と書かれている行を見つけて、そのステートメントを削除することもできます。新しいデータベースにインポートすると、最新の請求書から auto_increment が継続されます。ALTER TABLE を使用して同じことを行うこともできますが、再インポートする方が安全です。

于 2011-08-17T12:26:12.497 に答える