0

重複の可能性:
一番下の行を自然な順序で選択する

人々は私がこのテーブルを持っていると想像しています:

テーブルの列は NAME と ID です

そして私はこれを挿入します

insert into persons values ('name','id');

insert into persons values ('John','1');

insert into persons values ('Jack','3');

insert into persons values ('Alice','2');

この情報順序を挿入で選択するにはどうすればよいですか? 私のクエリは次のようになります:

名前 ID

名前ID

ジョン 1

ジャック3

アリス2

インデックス (オートインクリメント) なしで可能ですか?

4

5 に答える 5

2

order by句を指定せずに DBMS がデータを格納および取得する方法について、想定することはできません。つまり、PostgreSQL は MVCC を使用しており、行を更新すると、行の新しいコピーがテーブル データファイルの最後に物理的に作成されます。プレーンを使用するselectと、pg はシーケンス スキャン シナリオを使用します。これは、最後に更新された行が最後の行として返されることを意味します。

于 2012-06-05T20:25:22.370 に答える
2

これは、タイムスタンプを含む列またはテーブルを追加しないと不可能です。タイムスタンプ列を追加するか、ID とタイムスタンプを含む別のテーブルを作成して、同時にそれに挿入することができます。

于 2012-06-05T20:09:25.597 に答える
2

私はそうではないことを確信しています。私の知識から、SQLデータの順序は挿入に関してシーケンシャルではありません。私が持っている唯一のアイデアは、各挿入とともにタイムスタンプを持ち、そのタイムスタンプでソートすることです

于 2012-06-05T20:08:08.227 に答える
1

私は他の答えに同意する必要があります、これを行うための特定のフィールド/列がなければ...まあそれは信頼できない方法です...私が思う前にインデックスのないテーブルを実際に持ったことはありませんが..

インデックスを作成するための何かが必要になります。他の多くのアプローチや方法を使用できます...たとえば、何らかの形式の文字列の連結/結合を使用し、後でクエリ結果を分割/分離します。

-編集-どのような理由でこれらのメソッドを使用したくないですか?時間/autoinc

于 2012-06-05T20:15:45.797 に答える
0

挿入中に何らかの順序情報を保存しないと、データベースは挿入されたすべてのレコードとその順序を自動的に追跡しません (これはおそらく良いことです ;))。自動インクリメントは避けられません...タイムスタンプがあっても、同じ値を保持できます。

于 2012-06-05T20:14:28.573 に答える