mysql에서 "IF record EXISTS ELSE INSERT"를 구현하려고합니다. 특히 Doctrine ORM을 사용하여이를 수행하는 방법을 찾아야합니다."IF"로 mysql 문을 시작할 수 있습니까?
네이티브 MySql을 사용하는 한 가지 해결책은 "중복 키 업데이트"를 사용하는 것입니다. 불행히도 이것은 Doctrine에서 지원되지 않습니다.
다른 반 솔루션은 "REPLACE INTO"구문을 사용하는 것입니다. Doctrine은 이것을 지원하지만 REPLACE는 레코드를 갱신하지 않고 새로운 자동 증가 ID를 사용하여 레코드를 삭제하고 새 레코드를 작성합니다. 따라서 자동 증분 ID에 의존하면 나쁜 솔루션입니다 .
내가 조작하려고하는 테이블은 INNODB이므로 트랜잭션을 살펴 보았지만 동일한 규칙이 트랜잭션 내부에서 적용되는 것처럼 적용되는지 완전히 이해하지 못합니다.
IF (INSERT IGNORE INTO 테이블 critical_id
= $ id) 트랜잭션 내부에서 ELSE (UPDATE 테이블 SET field
= 'new_value')를 종료 할 수 있습니까?
그런 말을 할 수 없다면이 문제에 대한 해결책이 있습니까?
"중복 키 사용"방법을 찾았는데 이것이 가장 좋은 해결책이라고 생각합니다. 따라서이 대답을 받아 들일 것이지만, mysql 관련 용어가없는 트랜잭션 솔루션이 있는지 파악하려고합니다. fwiw, 제목에 제기 된 질문에 결코 대답하지 않았습니다. 대답은 IF로 SELECT, INSERT, UPDATE 문을 시작할 수 없다고 생각합니다. 다른 dbms에 존재하는 Recordcount라는 속성에 대해 들어 봤습니다. ' 나는 "내부 트랜잭션 카운터"인 mysql 동등 물을 찾고 있는데, 어떤 레코드가 수정되었는지 알려주고있다. 여전히 쳐다보다. – seans