2012-08-28 4 views
1

MySQL의 Default Value 속성 (즉, 열 정의의 DEFAULT 절)을 사용하여 동일하거나 다른 테이블의 다른 열 값을 기반으로 계산을 수행 할 수 있습니까?기본 MySQL 값으로 계산 수행

정적 기본 값을 모든 열에 설정할 수 있지만 계산을 수행하거나 다른 테이블의 데이터를 쿼리 할 수 ​​있습니까 ??

편집

는 이제 total_marks와 세 번째 열 percentagemarks 및 기타에 대한 열이있는 테이블을 가정 해 봅시다. percentage의 기본값을 이전 두 열에서 계산하는 방법

+1

예. 좀 더 많은 정보를 제공해 주시면 더 많은 아이디어를 제공해 드릴 수 있습니다. – Kermit

답변

8

아니요. DEFAULT 절의 값은 상수 여야합니다. 이 규칙의 한 가지 예외는 TIMESTAMP 열의 기본값으로 CURRENT_TIMESTAMP을 사용하는 것입니다.

행을 삽입하거나 업데이트 할 때 트리거 값을 사용하여 트리거 값을 설정할 수 있습니다.

예를 들어, BEFORE INSERT FOR EACH ROW 트리거에서 다른 열에 대해 제공된 값 및/또는 다른 테이블의 쿼리 데이터로부터 계산을 수행 할 수 있습니다.


질문, 트리거 정의에 대한 예를 들어 시작 지점의 편집에 주어진 예를 들어 편집

:

CREATE TRIGGER mytable_bi 
BEFORE INSERT ON mytable 
FOR EACH ROW 
BEGIN 
    SET NEW.percentage = (100.0 * NEW.marks)/NULLIF(NEW.total_marks,0); 
END 
+1

나는 그 질문에 대해 오해했다. 트리거를 사용하는 것이 정답입니다! +1 질문을 받고 해결을 위해 :) – eggyal

+0

나는 너무 트리거가 갈 수있는 방법이라고 생각하지만, 나는 기본값을 처리 할 수 ​​있는지 알고 싶었어요. 나는 그것이 할 수 없다고 생각한다. – tGilani

+0

구분 기호로 문제가 있음을 이해할 때까지이 프로그램을 실행하는 데 문제가있었습니다. http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html을 참조하십시오. "mysql 프로그램을 사용하여 여러 구문을 실행하는 트리거를 정의하는 경우 mysql을 다시 정의해야합니다 명령문 분리 문자를 사용하여 트리거 정의 내에서; 명령문 분리 문자를 사용할 수 있습니다. –

0

트리거 솔루션은 매우 중요하지만, 내가왔다 여기 약간 다른 상황이 있으며 그 해결책은 제가 찾고있는 것이 아닙니다.

테이블에 새 열을 추가하는 경우에만 기본 값을 사용하고 있습니다. 다른 모든 상황에서는 그 기본값을 사용하지 않을 것입니다. 그래서 나는 방아쇠를 당기고 싶지 않습니다.

이 경우 유일한 옵션은 기본값을 0 (또는 특정 값)으로 설정하는 것입니다. 그런 다음 새로 삽입 한 0을 모두 계산에 필요한 값으로 업데이트하십시오.

마지막으로 새 열의 기본값을 지금부터 필요한 것으로 변경하십시오.