基本上,您缺少一种引用任何单个特定行的方法。根据应用程序对此类参考的需求程度,允许这种情况几乎总是坏主意。有很多解决方案,例如
1) 每行通常包含唯一的 OID 或 ROWID 字段,它不会与“SELECT * FROM TABLE”一起显示,但可以在隐式请求时使用。取决于您使用的数据库引擎,例如使用 PostgreSQL 尝试
SELECT OID, * FROM TABLE WHERE OID = 'somevalue'
如果您不想在表上强制执行 UNIQUE,则通常使用此选项,而是在稍后处理可能的错误输入(如果不幸出现)。
2)您可以添加 ID 列,例如 autoincremental(请参阅 DB 手册),然后将其更新为包含唯一 ID
ALTER TABLE table_name ADD column_name column-definition;
3)您可以使用自增“运行总计”,例如。使用 MySQL,它看起来或多或少像这样:
SET @runtot:=0;
SELECT *, (@runtot := @runtot + 1) AS rt FROM table WHERE rt='somevalue'
(这每次都会进行计算,所以可能效率低下)
4)您可以使用 LIMIT 如上一个答案中所述
5)您可以加入另一个具有唯一 ID 的表并可能更新结果关系,或组合一些查询来创建和使用静态视图
6)您可以将 SELECT 与一些动态分配的值一起使用,例如 RAND() 或 NOW() 或类似的。它可能不会在整个表中创建唯一标识符,具体取决于您将使用什么函数以及如何使用它
7)将以上两种或多种解决方案结合起来
..可能还有许多其他解决方案。无论如何,通常会有一些“Id”列与一些 UNIQUE 约束一起使用。