2014-02-17 4 views
0

저는 온라인 거래 프로젝트를 진행하고 있습니다.
테이블 t1 (innoDB 엔진)에 한 행을 삽입하고 삽입 이벤트 후 하나의 트리거가 있습니다.
트리거에서 "SELECT * FROM t1 WHERE ID = NEW.ID"과 같은 표에서 select 문을 사용하여 데이터를 가져옵니다.
완벽하게 2 ~ 3 개월 동안 작동합니다. 하지만 이제 교착 상태 문제가 발생합니다.
이유가 무엇입니까?
한 번에 같은 테이블에서 여러 스레드가 동일한 작업을 액세스 할 수 있습니까?
MySQL 교착 상태 문제

+0

뭔가를 시도 할 수 있습니다

? – dethtron5000

+0

org.springframework.dao.DeadlockLoserDataAccessException : PreparedStatementCallback; SQL [INSERT INTO t1 (ID, NAME, ADDRESS) VALUES (?,?,?)]]; 잠금을 얻으려고 시도 할 때 교착 상태가 발견되었습니다. 트랜잭션을 다시 시작하십시오. 중첩 예외는 com.mysql.jdbc.exceptions.MySQLTransactionRollbackException입니다. 잠금을 얻으려고 시도 할 때 교착 상태가 발견되었습니다. 트랜잭션을 다시 시작해보십시오. at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate (SQLErrorCodeSQLExceptionTranslator.java:300) –

답변

0

이전에 삽입 한 ID를 원하십니까? 당신은 당신이 받고있는 정확한 오류를 게시 할 수이

INSERT INTO table1 (title,userid) VALUES ('test', 1); 
SET @last_id_in_table1 = LAST_INSERT_ID(); 
+0

만약 내가 New.ID를 트리거에 넣으면 그것은 잘 작동합니다. 하지만 선택 쿼리를 사용하여 "SELECT * FROM t1 WHERE ID = NEW.ID"와 같은 쿼리를 가져 오면 그 뒤에 이유가 무엇인지 교착 상태 문제가 있습니까? 왜 3 달 동안 완벽하게 작동하고 갑자기 교착 상태 오류가 발생합니까? –

+0

정확히 알지 못하지만 함수 스레드를 안전하게 빌드하지 않았을 수 있으므로 동시에 호출됩니다. pl. db 함수/java 코드 스레드를 안전하게 만드십시오. –