MySQL 仅当行不存在时插入,否则选择重复行
我正在寻找一条语句,该语句将尝试将一行插入表中,但如果遇到重复行,则返回重复行的主键。表中的一个字段是自增主键,另一个字段是唯一的。
I am looking for a statement that will try to insert a row into a table, but return the primary key of the duplicate row if one is encountered. One field in the table is the auto incrementing primary key, the other is unique.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
至少在理论上,这应该对您有用:
首先扩展您的表以添加一个tinyint类型的附加列虚拟。然后,您可以在插入/更新时使用以下查询:(
我假设 a 列具有唯一索引,并且存在 a=1 的行。)
然后您可以获得新行的 ID(如果是INSERT)或现有行(在更新的情况下)通过
This should, at least in theory, work for you:
First extend your table to have an additional column dummy of type tinyint. Then you can use the following query when inserting/updating:
(I'm assuming here that the column a has a unique index and a row with a=1 exists.)
You can then get the ID of the new row (in case of an INSERT) or the existing row (in case of an UPDATE) via
这应该在 DB2 中起作用,不知道在 MySQL 中是否有效,或者是否有特殊的 MySQL 语法:
这里的想法是当表中没有唯一值时从表中选择一行,插入新值并返回从表中生成的主键。然后,如果表中已存在唯一值,则将其与返回相应键的选择相结合。这些语句中只有一个应该返回一行,第二列指示主键是新的还是现有的。
This should work in DB2, dont know if it will in MySQL or if there is special MySQL syntax for it:
The idea here is to select one row from the table when there is not a unique value in there, inserting the new value and returning the generated primary key from the table. This is then combined with the select that returns the corresponding key if the unique values is already in the table. Only one of those statements should return a row, the second column indicating if the primary key is new or exisiting.