2017-07-25 12 views
1

私はMySqlで列 "id"を持つテーブルをauto_incrementおよびPrimary_keyとして作成しました。私は最初に3行、すなわち1,2,3を作った。私はnoを削除しました。 2行になりますが、番号付けは1のままです。3.どのように1,2に変更しますか?
MySql TableMySqlの行番号の自動更新

+0

連続していることが絶対に重要ですか? '1'と' 3'はそれをユニークにしています。 – GibralterTop

+0

うん!私はそれが逐次記載される必要があります。 –

答えて

2

短い答えは:あなたがいないを行います。これを変更することは、正しく実行しなければエラーが発生しやすくなる多段階の問題です。率直に言って、そうするのはめったにありません。そのようなタスクに関与

もの:

  1. から>=だすべてのididから

  2. 減算1(あなたがいることをやった)あなたはしたくない行を削除します。行を削除しました。

  3. 自動インクリメントカウンタを現在の1より小さく更新します。

  4. これが外部キーであるすべてのテーブルで同じことを実行します。

複数の行を削除する場合は、ロジックが非常に複雑になります。いずれにせよ、それはかなりのリソースを必要とし、あなたの外部キーを混乱させるでしょう。

このようなアクションは、実際にデータベースをどのように使用するかの原則に反するものです。 RDMSは、Excelスプレッドシートのようなフラットファイルではありません。行を削除して、自動インクリメントされたIDにギャップがあるようにしても、アプリケーションには何の違いもありません。

+0

ありがとう。実際に私は本当にID列が必要です。あなたは、それがオンライン試験ポータルであることがわかります。管理者は、彼が削除しようとしている質問のシリアル番号を知る必要があります。 –

+0

私は方法を見つけました。それは原油ですが、それは動作します。ユーザー/管理者が削除オプションを入力する前に、列全体を削除してもう一度作成します。 –

+0

Class.forName( "com.mysql.jdbc.Driver"); \t接続conn = DriverManager.getConnection( "jdbc:mysql:// localhost:3306/OnlineExamination"、 "root"、 "root"); \t PreparedStatement ps = conn.prepareStatement( "alter table qna_c drop id"); \t int r = ps.executeUpdate(); \t ps = conn.prepareStatement( "テーブルを変更するqna_cは、列IDをintには追加しませんauto_incrementプライマリキーを最初に"); \t r = ps.executeUpdate(); \t ps = conn.prepareStatement( "qna_cからの削除" id =? "); \t ps.setInt(1、id); \t r = ps.executeUpdate(); –

関連する問題