1

我有一种情况,列名“field1”和“field3”没有给我,但所有其他数据都是。请求通过以下 URL 进入:/table1/1 或 /table2/3,并假设 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

不,没有可用于映射到主键列的伪列。这很复杂的一个原因是给定的表可能具有多列主键。这是设计表格的一种完全普通的方式:

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 次通过过程”的解决方案,但一般情况下不存在此类解决方案。

一些应用程序框架环境试图通过鼓励开发人员给每个表一个单列主键并按照约定将列命名为“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 回答