我想在QLDB中创建一个唯一字段。我尝试使用UNIQUE
,但得到:
unexpected token found, KEYWORD : unique; Unexpected token following CREATE
答案 0 :(得分:2)
Amazon QLDB不支持所有PartiQL操作。
然后CREATE TABLE
参考文档说
QLDB支持开放内容,并且不强制执行模式,因此在创建表时您无需定义属性或数据类型。 [强调我的]
因此,合乎逻辑的结论是QLDB不支持您在表中定义的任何字段上的playSound("/audio/bot.wav");
约束。
这已由QLDB tutorial确认
INSERT语句创建版本号为零的文档的初始修订版。为了唯一地标识每个文档,QLDB分配了一个文档ID作为元数据的一部分。
重要
由于QLDB不执行架构,因此可以多次将同一文档插入表中。每个插入语句都会向日记提交一个单独的文档条目,并且QLDB为每个文档分配一个唯一的ID。
保证唯一的唯一字段是UNIQUE
。
答案 1 :(得分:1)
根据Matthew Pope的回答,QLDB当前不支持架构或唯一索引。
也就是说,在您的应用程序中实现此行为非常容易:
SELECT id FROM foo BY id WHERE attr = ? -- [1]
INSERT INTO foo ? -- [2]
在您的应用程序中,您应该断言SELECT查询(1)未找到任何结果,并且仅在断言通过后才运行INSERT语句(2)。
如果竞争事务同时通过断言(1),则仅其中一个事务将提交。另一笔交易将在OCC下失败。
按照书面规定,以上内容是唯一的属性,而不是唯一的 index 。出于性能原因,您可能会desire the attribute be indexed使得SELECT查询(1)不执行表扫描。
CREATE INDEX ON foo (attr)