5

我正在使用 MySQL 作为存储构建电子表格应用程序,我需要识别正在客户端更新的记录以保存更改。

有没有一种方法,例如某种“内部记录标识符”(数据库引擎本身使用的内部)来唯一标识记录,以便我能够更新正确的记录?

当然,可以使用 SELECT 查询来识别记录,包括表中的所有字段,但显然在大多数情况下会返回多条记录。

重要提示:电子表格应用程序旨在处理任何表,即使是设计极差的表,也没有任何键,因此不能选择“定义具有唯一索引的字段并使用它”等解决方案,表结构可能非常多变一定不要紧。

非常感谢。

4

3 回答 3

2

AFAIK 不存在这样的唯一内部标识符(例如,简单的行 ID)。

也许 可以在没有任何排序的情况下运行 a SELECT,然后使用 a 获取第 n 行LIMIT。在什么条件下使用是可靠和安全的,mySQL Guru 需要确认。它可能永远不会。

尝试使用phpMyAdmin,这是 mySQL 的 Web 前端。它旨在处理没有键的设计不良的表。如果我没记错的话,它会使用在这种情况下可以获取的所有列:

UPDATE xyz set a = b WHERE 'fieldname'  = 'value' 
                       AND 'fieldname2' = 'value2' 
                       AND 'fieldname3' = 'value3' 
                       LIMIT 0,1;

等等。

当然,这也不完全是重复安全的。

我想到的唯一想法是在运行时添加一个键列,并在您的应用程序完成时将其删除。这是一个令人起鸡皮疙瘩的想法,但也许总比没有好。

于 2010-02-13T15:45:45.547 回答
0

MySQL 具有“自动增量”数字列,您可以添加甚至定义为主键,这将为您提供由数据库自动生成的唯一记录 ID。您可以查询刚刚插入的最后一条记录IDselect LAST_INSERT_ID()

来自mysql官方文档的示例here

于 2010-02-13T15:39:33.220 回答
0

据我所知,MySQL 缺少 Oracle 中所见的隐式 ROWID 功能(并且存在于其他具有自己语法的引擎中)。您必须创建自己的AUTO_INCREMENT字段

于 2010-02-13T15:45:07.357 回答