12

最愛の W3schools を調べていて、このページを見つけて、実際に興味深いことを学びました。値に列を指定せずに挿入コマンドを呼び出すことができるとは知りませんでした。例えば;

INSERT INTO table_name
 VALUES (value1, value2, value3,...)

ぼんやりとした記憶から引き出すと、フィールドを特定の順序ではないかのように扱わなければならないという SQL の専門家の発言を覚えているようです (ただし、RDB 側にはありますが、保証されていません)。

私の質問は、どの値がどのフィールドに割り当てられるかをサーバーがどのように知るかということです.* 私はこれを自分でテストしますが、現時点で私がアクセスできるすべてのことを行うために本番サーバーを使用するつもりはありません.

このテクノロジーが特定の場合、私は PostgresSQL に取り組んでいます。この特定の構文はどのように役立ちますか?

4

6 に答える 6

10

あなたの教授は正しかった-値に名前を付ける前に、列に明示的に名前を付ける必要があります。

この場合、値はテーブル定義に表示される順序で挿入されます。

これに関する問題は、その順序が変更された場合、または列が削除または追加された場合 (それらが null 許容であっても)、挿入が壊れることです。

その有用性に関しては、製品コードではそれほどではありません。クイック挿入を手作業でコーディングしている場合は、すべての列名を入力する手間を省くことができます。

于 2012-08-09T13:46:53.727 に答える
5

それらは、テーブル定義にある順序でフィールドに挿入されます。

したがって、テーブルにフィールド (a、b、c) がある場合、a=value1、b=value2、c=value3 となります。

あなたの教授は正しかった、これは怠け者であり、壊れやすい. ただし、迅速で汚い遅延挿入には役立ちます。

于 2012-08-09T13:45:52.717 に答える
2

ここに「RTFM」を入れずにはいられません。
PostgreSQL のマニュアルでは、 INSERT に関する章で何が起こるかについて詳しく説明しています。

ターゲット列名は任意の順序でリストできます。列名のリストがまったく指定されていない場合、デフォルトは宣言された順序でのテーブルのすべての列です。または、最初のN列名 ( VALUES 句またはクエリによって指定された列がN 個しかない場合) 。VALUES 句またはクエリによって提供される値は、明示的または暗黙的な列リストに左から右に関連付けられます。

大胆強調鉱山。

于 2012-08-09T13:59:25.780 に答える
0

値は、テーブルに表示される列と同じ順序で追加されます。作業している列の名前がわからないが、どのデータを入力する必要があるかはわかっている場合に役立ちます。列の順序が間違っているともちろん壊れるため、通常、これを行うことはお勧めできません。変更または新しい列が途中に挿入されます。

于 2012-08-09T13:47:42.753 に答える
0

この構文は、列数と同じ数の値を指定した場合にのみ、列を指定せずに機能します。2 番目に重要なことは、SQL テーブルの列は常に同じ順序であり、それはテーブルの定義によって異なります。SQL テーブルに固有の順序がないのは行だけです。

于 2012-08-09T13:47:58.140 に答える
0

テーブルが作成されると、システム テーブル内の各列に順序番号が付けられます。したがって、各値は順序に従って挿入されます..

最初の値は最初の列に移動します...など

SQL Serverでは、システム テーブル syscolumn がこの順序を維持します。Postgresql には、これに似たものが必要です。

于 2012-08-09T13:48:40.053 に答える