2012-04-23 2 views
5

인터넷을 통해 검색 한 결과 저장소 프로 시저의 본문을 변경하는 유일한 방법은 삭제하고 다시 만들어야한다는 것입니다. 메커니즘에는 아무 문제가 없지만 서버 데이터베이스의 일부 데이터를 업데이트하기 위해 저장소 프로 시저를 계속 호출하는 클라이언트 응용 프로그램 (또는 수천 개의 분산 클라이언트)이있는 경우 프로 시저를 삭제하면 데이터가 손실되거나 손상 될 수 있습니다.MySQL : 저장 프로 시저를 원자 적으로 수정하는 방법?

"CREATE PROCEDURE IF EXIST ..."와 같은 구문이 있거나 비슷하게 기능하여 업데이트 작업이 원활하게 수행 될 것으로 생각합니다. 그러나 나는 MySQL에서 그러한 것을 사용할 수 없다는 것을 알았다.

어떻게이 문제를 해결할 수 있다고 생각하십니까? 굉장한 생각?

+0

MySQL에는 트랜잭션 DDL이 없기 때문에 가능하지 않을 것입니다. –

답변

3

MySQL에서는 저장 프로 시저를 수정할 수 있지만 (특성은 변경할 수 있음) 수정할 수 없습니다. ALTER PROCEDURE 페이지에서

이 문은 저장된 프로 시저의 특성을 변경하는 데 사용할 수 있습니다. ALTER PROCEDURE 문에 둘 이상의 변경 사항이 지정 될 수 있습니다. 그러나이 문을 사용하여 저장 프로 시저의 매개 변수 나 본문을 변경할 수는 없습니다. 이러한 변경을 수행하려면 을 삭제하고 DROP PROCEDURE를 사용하여 프로 시저를 다시 만들고 PROCEDURE를 만들어야합니다.

이 업데이트를 수행하는 동안 데이터를 잃을 수도 있지만 비교적 작은 창이어야하지만 데이터가 손상되지는 않습니다. 데이터베이스 대기 시간의 데이터 손실에 대비하여 시스템을 보호해야하는 경우 메시지 큐잉 기술을 살펴 보겠습니다.

+0

데이터가 손상되면 나는 데이터베이스의 무결성을 의미했습니다. 좋은 점이 있습니다. 따라서 모든 작업을 데이터베이스에 두는 대신 데이터 트랜잭션을 간과하기 위해 별도의 레이어를 가질 수 있습니다. –

관련 문제