Windows의 C++ 응용 프로그램에서 libmysqld C 라이브러리를 사용하여 임베디드 mysql 서버, 즉 임베디드 프로세스 수명 동안 온라인 상태 인 mysql 서버와 인터페이스합니다. 데이터베이스를 생성하는 응용 프로그램은 mysql .ini 파일을 사용하여 전역 mysql 설치 폴더 대신 응용 프로그램 디렉토리에 상대적인 datadir을 생성합니다.내장 된 mysql을 사용하여 트리거 만들기 C++
트리거를 프로그래밍 방식으로 만들 수 있습니다.
status = mysql_query(mysql,
"CREATE TRIGGER del_trigger AFTER DELETE ON table FOR EACH ROW\
INSERT INTO otherTable (col1, col2) VALUES (OLD.col1, OLD.col2)\
");
if (status == 0) {
Log(DEBUG, "Initialize(): <%p> Delete Trigger creation passed ...", this);
}
else {
Log(DEBUG, "Initialize(): <%p> Delete Trigger creation failed with error %s...", this, mysql_error(mysql));
}
내가 그러나으로 실행하는 문제는 트리거가 호출 될 때, MySQL은 내가 내 응용 프로그램 특정 DATADIR 내부 MySQL 데이터베이스가 없기 때문에 점도 역시 알아두기 바란다 테이블이 존재하지 않는다고 불평 것입니다. 나는 C에 설치 디렉토리에서 MySQL의 폴더를 복사 시도 : \ 프로그램 파일 \ MySQL을 ...하지만 그때 MySQL은
Error:Cannot load from mysql.proc. The table is probably corrupted
내가 위의 오류에 관한 본 유일한 조언을보고 문제로 실행이다 자신의 datadir을 사용하는 내장 데이터베이스의 경우에는 작동하지 않는 'mysql_upgrade'명령을 실행하십시오. 나는 모든 테이블이 생성되고 각각의 트리거가 설정되지만이 mysql.proc 오류를 해결할 수는 없다.
업데이트 : 나는 또한 여기에 몇 가지 일치하지 않는 행동을보고하고
. 내 MySQL 버전은 "mysql-5.5.16-win32"이고 mysql_embedded.exe 바이너리가있어서 콘솔을 열고 실행되지 않을 때 내 응용 프로그램에서 생성 된 데이터베이스 파일을 가리킬 수있다. mysql_embedded.exe에서 작업을 수행 할 때 트리거는 문제없이 작동합니다 ('mysql.proc은 손상되었을 가능성이 없습니다'오류). 그래서 libmysqld c api가 mysql 시스템 테이블에 문제가있는 것처럼 보입니다.