4

ユーザーが同時にデータを変更できる Web アプリケーションがあります。現時点では、各フォームに古い行の値を含め、データが同じ場合にのみ行を更新しています。SQLite では、これが唯一のオプションです。これは醜いので、これを行うためのより良い方法が提供される場合は、別の SQL データベースに切り替えることを検討しています。PostgreSQL または MySQL には、代わりに使用できる暗黙的な行のタイムスタンプまたはバージョン番号がありますか?

4

3 に答える 3

3

数値カウンターを使用する方が、タイムスタンプを使用するよりも優れています。タイムスタンプが正確であっても、データの 2 つのバージョンが同時にコミットされ、同じタイムスタンプが取得される可能性があります。数値カウンター (例: update mytable set counter=counter+1, data=? where id=? and counter=?) を使用すると、行が変更されるたびに一意のカウンター値が取得されます。(where 句で元のカウンター値を指定します。データが他のユーザーによって変更されている場合、一致する行はありません。)

これは「暗黙の」解決策ではありませんが、問題ないと思います。Hibernate などのライブラリには、この種のことを自動的に実行できる機能があるため、コードで心配する必要はありません。

于 2011-01-31T18:10:06.830 に答える
2

MySQL には、および制約と組み合わせると、この目的に使用できるTIMESTAMPデータ型があります。DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP

PostgreSQL では、呼び出されるすべてのテーブルに「隠しフィールド」がありxmin、行のバージョンを特定するために使用できます。

于 2011-01-31T18:02:09.533 に答える
0

私の知る限り、Postgres で更新タイムスタンプを取得するにはトリガーが必要です。この非常によく似た質問を参照してください。

PostgreSQL で行が更新されたときにタイムスタンプを更新する

その質問 (および Eric の回答) は、MySQL がこの w/oa トリガーをサポートしていることを指摘しています。

于 2011-01-31T18:03:15.080 に答える