1

私はこのようなテーブルを持っています:

表1:

sr no. | id | name

ここでは id が主キーです。sr no.周期的になりたい。
フィールドにどの属性を与える必要がありsr no.ますか?

たとえば、sr no1,2,3,4,5 とid1,2,3,4,5 の 5 つのレコードがあり、3 番目のレコードを削除するidと、1,2,4,5 になりsr no.、1,2,3 になります。 4 sr noはその論争性を失うべきではありません。

4

3 に答える 3

4
SELECT  @a:=@a+1 serial_number, 
        name  FROM    table1,
        (SELECT @a:= 0) AS a;
于 2013-02-27T12:05:19.053 に答える
1

srnoの本当の目的はわかりません。

ただし、このテーブルのDELETE操作で作成できますTriggerこれで、現在のIDより大きいレコードを更新して、srnoを1だけ減らすことができます。

たとえば、トリガーでSQLの下に書くことができます。

UPDATE table1 SET sr_no = sr_no -1 WHERE id > XYZ;
于 2013-02-27T11:35:49.143 に答える
1

idはすでに主キーです。何が必要sr no.ですか? それを忘れることをお勧めします。

本当に必要な場合は、これが本当に悪い考えであるいくつかの理由について、こちらの私の回答を参照してください。最も重要な理由:

行を削除するときに MySQL が自動インクリメント値を自動的に減らさないのには理由があります。それらの理由は

  • データの整合性が損なわれる危険性があります (複数のユーザーが削除または挿入を実行すると想像してください...二重のエントリが発生するか、さらに悪化する可能性があります)
  • マスター スレーブ レプリケーションまたはトランザクションを使用すると、エラーが発生する場合があります
  • 等々 ...

隙間を気にする必要はありません。

質問に答えるにauto_incrementは、列定義を追加して主キーに含めるだけです。

于 2013-02-27T11:32:00.060 に答える