同时创建和检索索引?

时间:2018-11-14 23:22:08

标签: c# sql indexing mariadb

我正在研究一个C#程序,该程序在其后带有MariaDB。 因为它可以由多个用户同时运行,所以当使用“ INSERT”语句插入(创建)新行时,我将索引(唯一索引字段)留空,然后由MariaDB分配它们。

问题是,由于我在程序中将索引字段留空,所以我不知道在DB中分配了什么索引号。如果我尝试在客户端上创建索引,则无法保证它在数据库上也是唯一的。

因此,在创建行时是否有办法检索DB分配的索引号?

PS:我正在使用sqlcommandbuilder和sqladapter的更新功能。

2 个答案:

答案 0 :(得分:1)

您完全正确:您无法在GUI中定义主键。这样做只会使您陷入种族状况。您需要让数据库生成它(以及任何其他自动值),然后将其返回。

我对Maria DB不了解,所以我只能为您提供与SQL相关的答案:SELECT TOP和SCOPE_IDENTITY都已使用。但是,这些都不是种族条件。但是,SQL OUTPUT clause是什么。检索像PK这样的自动创建的数据就是为了它。它甚至是围绕DML语句的原始Transaction的一部分。

我找不到匹配的“ MariaDB OUTPUT子句”。但是我确实找到了:

  

该语句的其他选项包括“ INSERT ... SET”语句,   “ INSERT ... SELECT”语句以及其他几个选项。

“插入选择”语法最接近于SQL的INSERT ... OUTPUT组合。可以。

编辑:嗯,毕竟MariaDB中的INSERT SELECT似乎并不是您要寻找的机器人:https://mariadb.com/kb/en/library/insert-select/更像是从其他表/导入中批量插入/插入

所以我想,后备方法是创建自己的插入/选择组合,这是手动创建的Transaction的一部分并锁定在表上。

答案 1 :(得分:0)

使用下面的2条sql怎么样?

SELECT MAX(id) FROM mytable.

SELECT LAST_INSERT_ID()

会成为另一个比赛条件吗?