私はこのようなテーブルを持っています:
表1:
sr no. | id | name
ここでは id が主キーです。sr no.
周期的になりたい。
フィールドにどの属性を与える必要がありsr no.
ますか?
たとえば、sr no
1,2,3,4,5 とid
1,2,3,4,5 の 5 つのレコードがあり、3 番目のレコードを削除するid
と、1,2,4,5 になりsr no.
、1,2,3 になります。 4
sr no
はその論争性を失うべきではありません。
私はこのようなテーブルを持っています:
表1:
sr no. | id | name
ここでは id が主キーです。sr no.
周期的になりたい。
フィールドにどの属性を与える必要がありsr no.
ますか?
たとえば、sr no
1,2,3,4,5 とid
1,2,3,4,5 の 5 つのレコードがあり、3 番目のレコードを削除するid
と、1,2,4,5 になりsr no.
、1,2,3 になります。 4
sr no
はその論争性を失うべきではありません。
SELECT @a:=@a+1 serial_number,
name FROM table1,
(SELECT @a:= 0) AS a;
srnoの本当の目的はわかりません。
ただし、このテーブルのDELETE操作で作成できますTrigger
。これで、現在のIDより大きいレコードを更新して、srnoを1だけ減らすことができます。
たとえば、トリガーでSQLの下に書くことができます。
UPDATE table1 SET sr_no = sr_no -1 WHERE id > XYZ;
id
はすでに主キーです。何が必要sr no.
ですか? それを忘れることをお勧めします。
本当に必要な場合は、これが本当に悪い考えであるいくつかの理由について、こちらの私の回答を参照してください。最も重要な理由:
行を削除するときに MySQL が自動インクリメント値を自動的に減らさないのには理由があります。それらの理由は
- データの整合性が損なわれる危険性があります (複数のユーザーが削除または挿入を実行すると想像してください...二重のエントリが発生するか、さらに悪化する可能性があります)
- マスター スレーブ レプリケーションまたはトランザクションを使用すると、エラーが発生する場合があります
- 等々 ...
隙間を気にする必要はありません。
質問に答えるにauto_increment
は、列定義を追加して主キーに含めるだけです。