2012-10-16 6 views
0

저는 정말 mysql의 초보자입니다. 오라클에서는 트리거을 사용할 수 있습니다. 은 삽입 요소를으로 감지하고 잘못된 경우 insert 명령을 완전히 중단 할 수 있습니다. 나는 mysql이 트리거도 지원한다는 것을 알았지 만, 삽입 매개 변수를 탐지하고 규칙을 만족시키지 않으면 삽입을 중단하는 데 어떻게 사용할 수 있습니까?조건부 삽입 (mysql)

e.g. INSERT INTO accounts (userId, balance) VALUES ('12','450'); // Valid 
    INSERT INTO accounts (userId, balance) VALUES ('12','-574'); // Invalid 

if(balance<0){ 
    Do not insert; 
} 
else{ 
    Insert; 
} 

참고 : 아무도 해킹 할 수 없도록 내가 그렇게 가 엄격해야 동시 트랜잭션 다루고있어, 즉 가장 낮은 수준의 에러 검출을 트리거합니다. 도움이 될 것입니다. 감사합니다,

+1

어디에 문제가 있습니까? 당신이 PHP에서 어떻게 설명하는지에 대해서도. 당신은 부정적인 것에 대한'$ balance' 변수를 검사하고 적절하게 행동합니다. –

+0

PHP 스크립트 또는 pure mysql에서이 작업을 수행 할 예정입니까? –

+0

동시 트랜잭션을 처리하기 때문에 아무도 해킹 할 수 없도록 트리거를 최소화해야합니다. 즉 가장 낮은 수준의 오류 탐지가 필요합니다. –

답변

2

을 ALTER TABLE 필드 제약 조건을 설정 또는 사용 INSERT 사용할 수 있습니다

DELIMITER $$ 

CREATE TRIGGER au_a_each BEFORE INSERT ON accounts FOR EACH ROW 
BEGIN 
IF new.balance > 0 THEN 
    BEGIN 
    INSERT INTO b (id,balance) VALUES (new.id, new.balance); 
    END 
END $$ 
DELIMITER ; 
MySQL의 설명서

상세 정보 : http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

PS : 프로그래밍 수업 번호 1 (자본 "o"하나) - 프로그래밍/스크립팅 언어의 문서가 무엇이든지간에 친구가 되십시오.

+0

고마워 내 잘못이야 ..... –

1

당신은 BEFORE INSERT 트리거를 무시하고 MySQL의에서

+0

제가 최근에 mysql로 ​​전환했다고 말했기 때문에 적절한 예제를 제공해주십시오. –

+0

대량 데이터가 INSERT INTO 문의 형태로 있다고 가정합니다. 테이블을 생성하는 동안 잔액 필드에 필드 특성 UNSIGNED를 설정할 수 있습니다. 그런 다음 slq 문을 INSERT IGNORE INTO로 변경하십시오. 잔액 필드 값이 0보다 크거나 같은 데이터가 삽입됩니다. 다른 것은 오류를주지 않을뿐 아니라 삽입되지도 않습니다. 즉, 무시됩니다. –