mysql - 是否有关键字来标识 MySQL WHERE 子句中的 PRIMARY 列?

标签 mysql sql primary-key where-clause

我有一种情况,列名“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?

最佳答案

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

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

当我在 Zend Framework 1.0 中实现表数据网关类时,我不得不编写代码来“发现”表的主键列(或列),如@doublesharp 所述。然后表对象实例保留此信息,以便搜索和更新知道在生成查询时使用哪个(或哪些)列。

我知道您正在寻找一种不需要这种“两步流程”的解决方案,但一般情况下不存在这样的解决方案。

一些应用程序框架环境试图通过鼓励开发人员为每个表提供一个单列主键并按照约定将列命名为“id”来简化问题。但这种约定过于简单化,无法涵盖许多合法的表格设计。

关于mysql - 是否有关键字来标识 MySQL WHERE 子句中的 PRIMARY 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16576143/

相关文章:

mysql - mysql中主键的选择和自动增量的意外行为

algorithm - 机器生成的 UUID 只能产生零吗?

php - 使用下拉值更新 MySql DB

java - 针对 MySQL 在 Hibernate 实体中建模 UUID

mysql - 您可以在 ON DUPLICATE KEY 中使用聚合值吗

sql - SQL Server 2008 中工作日的数据类型

sql - 你如何添加外键关系?

sql - 需要获取两列组合都存在且不存在的行

Python MySQL编码错误: 'latin-1' codec can't encode character: ordinal not in range(256)

sql-server - SQL Server 中的 IGNORE_DUP_KEY 选项