2011-04-14 2 views
3

MySQL은 다른 프로그램이나 명령 줄에서 사용자가 수행하는 삽입과 같은 데이터베이스에서 변경이 발생하면 알림을받을 수 있도록 C에서 콜백을 허용합니까?MySQL이 C에서 콜백을 허용하여 변경이 발생하면 알림을받을 수 있습니까?

mysqlclient는 실행중인 스레드가 아니기 때문에 mysqlclient가 라이브러리가 아니기 때문에 추측하고 있습니다. 그러나 나는 묻는다.

답변

2

MySQL의 트리거를 사용하면 쿼리를 삽입/업데이트/삭제하고 추가 작업을 수행 할 수 있습니다. 예를 들어, 별도의 테이블에 로그 할 수 있습니다.

4

은과 같이 트리거를 만듭니다.

DELIMITER $$ 

CREATE TRIGGER ad_mytable_each AFTER DELETE ON MyTable FOR EACH ROW 
BEGIN 
    #write code that trigger After delete (hence the "ad_" prefix) 
    #For table MyTable (The _MyTable_ middle) 
    #On each row that gets inserted (_each suffix) 
    # 
    #You can see the old delete values by accesing the "old" virtual table. 
    INSERT INTO log VALUES (old.id, 'MyTable', old.field1, old.field2, now()); 

END$$ 

DELIMITER ; 

INSERT, DELETE, UPDATE
에 대한 트리거가 있습니다 그리고 그들은 BEFORE 또는 AFTER 작업을 발사 할 수 있습니다.
트리거는 BEFORE 트리거를 통해 오류를 강제로 취소 할 수 있습니다.

CREATE TRIGGER bd_mytable_each BEFORE DELETE ON MyTable FOR EACH ROW 
BEGIN 
    #write code that trigger Before delete (hence the "db_" prefix) 
    declare DoError Boolean; 

    SET DoError = 0; 

    IF old.id = 1 THEN SET DoError = 1; END IF; 

    IF (DoError = 1) THEN SELECT * FROM Table_that_does_not_exist_to_force_error; 
    #seriously this example is in the manual. 

END$$ 

DELIMITER ; 

이 기록의 삭제를 방지 할 수 UPDATE 트리거도 업데이트 된 값을 변경하기 전에 1.

를했다.

CREATE TRIGGER bu_mytable_each BEFORE UPDATE ON MyTable FOR EACH ROW 
BEGIN 
    IF new.text = 'Doon sucks' THEN SET new.text = 'Doon rules'; 
END$$ 

DELIMITER ; 

희망 하시겠습니까?

+0

코드에서 @Doon 참조에 +1을 추가 할 수 있으면 좋겠습니다. –

1

UDFs (사용자 정의 함수)과 결합 된 triggers을 사용하여 데이터베이스에서 해당 작업이 C/C++ 함수를 호출하는 트리거를 실행하도록 할 수 있습니다.

이 메커니즘이 클라이언트 측이 아닌 mysql 서버 프로세스 내에서 코드를 실행한다고 생각해보십시오.

관련 문제