使用 XQuery 更新自动递增?
XQuery
Update 是否支持自动增量属性,就像 SQL
中的自动增量字段一样?
我使用 BaseX
作为我的数据库。
Does XQuery
Update support auto increment attributes, just like auto increment fields in SQL
?
I'm using BaseX
as my database.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
鉴于 Christian Grün 在 BaseX 邮件列表上的回答< /a>,当要添加的节点是在 XQuery Update 语句中定义时这是可行的,因此可以在插入节点之前使用
{封闭表达式}
进行增强:我无法使用用 Java 创建并使用 XQJ 添加到 XML 数据库的外部 org.w3c.dom.Document 来实现相同的效果
声明变量$doc external
。在这里,人们可能会在添加文档后更新“自动增量”数据。但是,处理模型定义在所有命令都已排队之前更改不可见(待更新列表)。因此,根据定义,新文档或节点对于同一 FLWOR 表达式中的更新根本不可见。所以:...随后重复执行以下操作,将不起作用:
上面,最后插入的文档将始终具有
,并且不会更新,直到添加下一个文档。 (此外,当存在多个带有
的文档时,它也不起作用。)尽管在上面的示例中,可以成功删除 . .. 部分和使用:
...我没有运气在 Java 代码的文档中设置
,因为封闭的表达式不会被替换。最后,一些类似解决方案的说明:
在我们的例子中,id 也会用在 URL 中;那就不太好了。
另请参阅 XRX/自动增量文件 ID 和 使用 XQuery 返回文档 ID。
Given an answer from Christian Grün on the BaseX mailing list, this is doable when the node one is adding is defined in the XQuery Update statement, and hence can be enhanced using an
{enclosed expression}
before inserting it:I've not been able to achieve the same with an external
org.w3c.dom.Document
created in Java, and added to the XML database using XQJ anddeclare variable $doc external
. Here, one might be tempted to update the "auto-increment" data after adding the document. However, the processing model defines that changes are not visible until all the commands have been queued (the Pending Update List). Hence a new document or node is, by definition, simply not visible for updates in the same FLWOR expression. So:...followed by repetitive executions of the following, will NOT work:
Above, the last inserted document will always have
<note id="">
, and will not be updated until the next document is added. (Also, it would not work when somehow multiple documents with<note id="">
would exist.)Though in the example above one could successfully delete the
for $note in ...
part and use:...I had no luck setting
<note id="{ $count }">
in the Document in the Java code, as that enclosed expression would not be replaced then.Finally, some state for similar solutions:
In our case, the id would also be used in URLs; not too nice then.
See also XRX/Autoincrement File ID and Using XQuery to return Document IDs.
这取决于底层数据存储的实现,因为自动增量属性位于关系数据库中的列定义上。
也许,“是”。
This would depend on the implementation of the underlying data-store, because the auto-increment attribute is on the column definition in relational databases.
Probably, "yes".