RethinkDb是否在类似于Mysql中的AUTO_INCREMENT的整数列上支持AUTO_INCREMENT。 https://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
答案 0 :(得分:4)
不,RethinkDB不支持它。原因是它的分布。在这样的环境中很难有一个自动增量号,因为你必须在多台机器上检查下一个增量值。
现在,让我们想一想自动增量解决的问题是什么?在MySQL上,我们希望将它用于主键,因此它需要是唯一的。这就是它的全部。自动增量不会给你任何其他东西。
在RethinkDB中,UUID保证唯一性,特别是在主键的情况下。
自动增量也是可以预测的,可能它不会导致任何有害但理想情况下,它可以让人们了解下一次攻击的价值。例如,采取一个糟糕的设计应用程序,我们可以访问一些URL,如/ this / is / a / sensitive / part / 123,有人可以点击/ this / is / a / sensitive / part / 124。当然,这是没有可靠的身份验证系统的应用程序的错误。但是,UUID可能有助于减少这一点,因为UUID是不可预测的。
答案 1 :(得分:1)
我们按照以下示例进行存档
```
r.db('autoInc').table('testauto')
.insert(r.do(function() {
return {
autoVal:r.branch(
r.db('FlowzEngine').table('task_worker').isEmpty().not()
.and(r.db('FlowzEngine').
table('task_worker').hasFields('autoVal')
.isEmpty().not()),
r.db('FlowzEngine').table('task_worker')
.hasFields('autoVal').max('autoVal')
.do(function(doc){
return doc('autoVal').add(1)
}),
1)}
}))
```
答案 2 :(得分:0)
您可以使用如下的计数器表来实现此目的:
r.table('counters')
.get(id)
.update({
count: r.row('count')
.default(0)
.add(1)
}).run(conn, callback);
答案 3 :(得分:0)
如果使用Daniel Mewes php-rql,则基于Chirag答案的示例适用于php。
出于某种原因,Chirag的答案是使用单独的表显示的,这不是必需的,不确定示例中是否存在疏忽。
$result = \r\table('user')
->insert(array(
'username' => $username, /* other data for example */
'password' => $password,
'userId' =>
\r\rDo(null, function($arg) {
return \r\branch(
\r\table('user') /* if */
->isEmpty()->not()
->rAnd(
\r\table('user')
->hasFields('userId')
->isEmpty()->not()
),
\r\table('user') /* then */
->hasFields('userId')
->max('userId')
->rDo(function($arg) {
return $arg('userId')->add(1);
}),
1); /* else */
})
))
->run($db);
我认为我会添加它,因为花了我几分钟多的时间才能在PHP上运行它,语法上的差异可能会令人讨厌。