2014-11-22 96 views
0

我有一个用户表,其中有一些下载列,我如何将它初始化为非常新行的0。我只想让它在另一个表格中触发事件时进行更改。如何在插入新行时在列中设置默认值0

+0

在你的迁移中,你可以有't.integer:sample,default:0'之类的东西,或者在你的模型中有一个回调,如果它是一个新记录来执行类似'self.sample || = 0'的事情回调方法。 – kobaltz 2014-11-22 15:01:18

+0

默认情况下,该值为NULL。您可以在'create table'语句中使用'DEFAULT'关键字来设置默认值。 – 2014-11-22 15:02:26

+0

@GordonLinoff但是如果插入一个值为3的值,则下载次数为3,我想停止输入任何值 – fana 2014-11-22 15:07:17

回答

1

您可以在create table语句中使用默认的语句将其设置为0

create table . . . 
    numdownloads int default 0 

你也可以做到这一点使用一个alter table语句创建表之后。

但是,您并不需要这样做。在你的触发器,你可以做:

update user 
    set numdownloads = coalesce(numdownloads, 0) + 1 

增加值。

当你拉的数据,你可以使用coalesce()NULL0

select . . . , coalesce(numdownloads, 0) as numdownloads 
from user 

编辑:

要插入任何值停止用户,然后使用INSERT触发器。或者,只需在需要时计算该值,而不是将其存储为计数器。

相关问题