0

MySql データベースと対話する Web アプリケーションがあります。レコードを削除すると、次に新しいレコードを作成するときにそのスロットが再利用されるようです。各レコードには連続する主キーがあるため、次のレコードには 5 などの新しいキーがありますが、新しいレコードは最後に空になった場所、たとえばレコード番号 2 があった場所に配置されます。新しいレコードをリストの一番下に直接追加する方法はありますか? おそらくMySQL Query Browserでそれを行う方法はありますか?

これは私が説明していることの例です:

1 ユーザー名1 パスワード1
2 userName2 password2 --> 次の操作でこのレコードが削除されます
3 ユーザー名3 パスワード3
4 ユーザー名4 パスワード4

レコード #2 がなくなると、次に新しい追加を行うと、レコード #5 が 2 位になります。

1 ユーザー名1 パスワード1
5 ユーザー名5 パスワード5
3 ユーザー名3 パスワード3
4 ユーザー名4 パスワード4

新しいレコードをリストの一番下にのみ追加するように (おそらくテーブルの作成時に) MySQL に指示する推奨される方法はありますか? そのため、自動記録再利用を無効にしたいと考えています。

よろしくお願いいたします。

4

4 に答える 4

4

追加するだけ

ORDER BY id

クエリの最後まで(「id」はテーブルの1、2、3、4、5列です)

于 2009-06-29T13:30:29.613 に答える
0

InnoDBはそれをある程度のレベルで処理します。すべてのInnoDBテーブルには、クラスター化された何らかの形式の主キーがあり、それらは通常、挿入を順番に処理するように設定されています。

InnoDBの使用が妨げられている場合は、MyISAMの動作に合わせてソースコードを変更する必要があると思います。私はMySQL用の他の「通常の」ストレージエンジンに特に精通していないので、別の代替手段があるかどうかはわかりません。

于 2009-06-29T13:44:32.237 に答える
0

シーケンスを使用して ID を設定する「挿入時」トリガーを作成できます (Oracle に従ってメモリから書き込むため、MySQL で異なるかどうかを確認する必要があります)。

create sequence table_name_id_seq order nocache cycle maxvalue 99999999;

create or replace trigger table_name_id
before insert on table_name for each row
begin
  select table_name_id_seq.nextval
    into :new.id
    from dual
  ;
end;
于 2009-06-29T13:36:48.960 に答える