0
我有一个用户表,其中有一些下载列,我如何将它初始化为非常新行的0。我只想让它在另一个表格中触发事件时进行更改。如何在插入新行时在列中设置默认值0
我有一个用户表,其中有一些下载列,我如何将它初始化为非常新行的0。我只想让它在另一个表格中触发事件时进行更改。如何在插入新行时在列中设置默认值0
您可以在create table
语句中使用默认的语句将其设置为0
:
create table . . .
numdownloads int default 0
你也可以做到这一点使用一个alter table
语句创建表之后。
但是,您并不需要这样做。在你的触发器,你可以做:
update user
set numdownloads = coalesce(numdownloads, 0) + 1
增加值。
当你拉的数据,你可以使用coalesce()
转NULL
到0
:
select . . . , coalesce(numdownloads, 0) as numdownloads
from user
编辑:
要插入任何值停止用户,然后使用INSERT触发器。或者,只需在需要时计算该值,而不是将其存储为计数器。
在你的迁移中,你可以有't.integer:sample,default:0'之类的东西,或者在你的模型中有一个回调,如果它是一个新记录来执行类似'self.sample || = 0'的事情回调方法。 – kobaltz 2014-11-22 15:01:18
默认情况下,该值为NULL。您可以在'create table'语句中使用'DEFAULT'关键字来设置默认值。 – 2014-11-22 15:02:26
@GordonLinoff但是如果插入一个值为3的值,则下载次数为3,我想停止输入任何值 – fana 2014-11-22 15:07:17