2014-11-22 2 views
0

다운로드 수가 많은 사용자 테이블이 있는데, 새 행을 0으로 초기화하는 방법은 무엇입니까? 다른 테이블에서 이벤트를 트리거 할 때만 변경하고 싶습니다.새 행을 삽입 할 때의 열의 기본값을 0으로 설정하는 방법

+0

마이 그 레이션에서't.integer : sample, default : 0'과 같은 것을 가질 수 있습니다. 또는 모델에서'self.sample || = 0'과 같은 것을하기위한 새로운 레코드 인 경우 콜백이 가능합니다. 콜백 메소드. – kobaltz

+0

기본적으로이 값은 'NULL'입니다. 'create table' 문에서'DEFAULT' 키워드를 사용하여 기본값을 설정할 수 있습니다. –

+0

@ GordonLinoff하지만 값에 3이 삽입되었다고하면 다운로드 수는 3이되고 값을 입력하지 않으려 고합니다. – fana

답변

1

당신은 create table 문에서 기본 문을 사용하여 0으로 설정할 수 있습니다 : 테이블을 만든 후 당신은 또한 alter table 문을 사용하여이 작업을 수행 할 수 있습니다

create table . . . 
    numdownloads int default 0 

.

그러나 실제로이 작업을 수행 할 필요는 없습니다. 방아쇠를 당길 수 있습니다 :

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

값을 증가시킵니다. 당신이 데이터를 가져 오는 경우

, 당신은 0NULL를 설정하는 coalesce()를 사용할 수 있습니다

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

편집 :

는 삽입 트리거를 사용하여 값을 삽입에서 사용자를 중지하려면. 또는 카운터로 저장하는 대신 필요할 때 값을 계산하십시오.

관련 문제