1

列名「field1」と「field3」が与えられていない状況がありますが、他のすべてのデータは与えられています。リクエストは /table1/1 または /table2/3 のような URL を介して受信され、1 または 3 が主キーを表すと想定されます。ただし、列名は異なる場合があります。次の 2 つのクエリを検討してください。

SELECT * FROM table1 where field1 = 1 and field2 =2;
SELECT * FROM table2 where field3 = 3 and field4 =4;

理想的には、次のような検索を実行したいと思います。

SELECT * FROM table1 where MYSQL_PRIMARY_COLUMN = 1 and field2 =2;
SELECT * FROM table2 where MYSQL_PRIMARY_COLUMN = 3 and field4 =4;

MySQL WHERE 句で MYSQL_PRIMARY_COLUMN を識別するキーワードはありますか?

4

2 に答える 2

1

いいえ、主キー列にマップするために使用できる疑似列はありません。これが複雑な理由の 1 つは、特定のテーブルに複数列の主キーがある可能性があることです。これはテーブルを設計するためのまったく普通の方法です:

CREATE TABLE BooksAuthors (
  book_id INT NOT NULL,
  author_id INT NOT NULL,
  PRIMARY KEY (book_id, author_id)
);

Zend Framework 1.0 でテーブル データ ゲートウェイ クラスを実装したとき、@doublesharp が説明しているように、テーブルの主キー列 (または列) を「検出」するコードを作成する必要がありました。その後、表オブジェクト・インスタンスはこの情報を保持していたので、検索と更新は照会の生成時に使用する列 (または複数の列) を認識していました。

この「2 パス プロセス」を必要としないソリューションを探していることは理解していますが、一般的なケースではそのようなソリューションは存在しません。

一部のアプリケーション フレームワーク環境では、開発者がすべてのテーブルに 1 つの列の主キーを与え、慣例により列に "id" という名前を付けるよう奨励することで、問題を単純化しようとします。しかし、この規則は単純化しすぎて、多くの正当なテーブル設計をカバーできません。

于 2013-05-15T23:05:59.047 に答える
0

DESCRIBE( の同義語) を使用EXPLAINして、すべての列情報を含むテーブルに関する情報を取得できます。

DESCRIBE `table`;

SHOW INDEXキーに関する情報を取得するために使用することもできPRIMARYます。

SHOW INDEX FROM `table` WHERE Key_name = 'PRIMARY'
于 2013-05-15T22:41:45.037 に答える