2011-04-28 4 views
1

나는 name이라는 열과 first_name_start이라는 열을 가진 customer이라는 테이블을 가지고 있습니다. first_name_startSUBSTRING(name, 1, 4)과 같아야합니다. 어떻게 이런 일이 일어나는가?이 MySQL 트리거를 어떻게 만듭니 까?

+0

테이블을 비정규 화해야합니까? –

+0

어떤 조건에서이 트리거를 시작 하시겠습니까? 삽입물에서만 이름 필드를 업데이트합니까? 우리는 더 많은 정보가 필요합니다. –

+0

'name' 컬럼에 대한 삽입과 갱신 모두. Nick, 나는 확신한다. 나는 비정규 화하지 않아도되지만, 내가 필요로하는 성능을 얻을 수 없었 으면 좋겠다. (나는 확인했다.) –

답변

3
DELIMITER $$ 

CREATE TRIGGER trigger_name BEFORE INSERT ON your_table 
FOR EACH ROW 
BEGIN 
    SET NEW.first_name_start = SUBSTRING(NEW.name, 1, 4); 
END$$ 

CREATE TRIGGER trigger_name BEFORE UPDATE ON your_table 
FOR EACH ROW 
BEGIN 
    SET NEW.first_name_start = SUBSTRING(NEW.name, 1, 4); 
END$$ 

DELIMITER ; 

불행히도, 나는 이것을 시험 할 시간이 없었습니다. 완전히 잘못되었을 수 있습니다.

+1

이것은 작동합니다 - 거의 동일한 것을 테스트했는데 삽입물 만 처리하지만 OP는 삽입/업데이트/모든 것을 지정하지 않습니다 – Erik

+0

@Erik : OP가 업데이트에 대해 주석을 처리하도록 요청 했습니까? 그의 질문에. –

0

실제로 열로 필요하다면 first_name_start을 추가하는 뷰를 만들면 어떨까요? 그런 다음 중복 된 데이터를 저장하지 않을 것이지만 마치 마치 사용자가 그대로 사용할 수 있습니다.

+0

그것은 가장 논리적 인 일이며, 나는 할 수 있었으면 좋겠지 만, 그것은 충분히 잘 수행되지 않는다. –

+0

흥미 롭습니다. 하위 문자열 열 (물론 트리거가없는 항목)이있는 곳에서 솔루션을 테스트 했습니까? 그렇다면 MySQL이 "가장 논리적 인"솔루션을 잘 수행 할 수 없다는 점이 다소 불행합니다. –

+0

방금 ​​쿼리를 실행하여'WHERE SUBSTRING (...')을 넣었습니다. 어색하게 느려졌습니다. –

관련 문제