면책 조항 : 내 DB 지식고유 Contrains
내가 값을 갱신/삽입하는 기술이 존재하는지 알고 싶습니다 ... 그래서 Vertica의에서 몇 가지 오해 할 수 MySQL의에서 주로 온다 여러 세션에서 고유 한 제약 조건을 적용합니다. 제가 테이블을 가지고 있다고 가정 해 봅시다 :
'id', 'unique_field', 'some_filed'
그리고 unique_field에 대한 유일한 제약이 있습니다. 내 이해는 Vertica에서 먼저 삽입을 수행하고 제약 조건 위반 여부를 확인하기 위해 ANALYZE_CONSTRAINTS를 수행해야한다는 것입니다. 필자의 경우, 동일한 테이블에 INSERT를 수행하는 여러 세션이 있으며 동일한 레코드를 푸시 할 수 있습니다. 나는 두 개의 별도의 세션에서이 순서를 실행하면
Insert into table (id, unique_field, some_field) values (5, 'abc', 'data');
SELECT ANALYZE_CONSTRAINTS(table);
COMMIT;
이 두 쿼리는 동일한 unique_field를 삽입하려고하는 기회가 그들 각각에 대해 아무런 구속이 없을 것 : 단일 세션의 순서로 나타납니다 별도의 거래에서 위반 사항이 감지되어 중복 데이터가 발생합니다.
이런 일이 발생하지 않도록 더 좋은 방법이 있습니까? 아니면 뭔가 빠졌어요.
명확히하기 위해 ANALYZE_CONSTRAINS()는 올바르게 실행되는 트랜잭션의 범위 내에서 작동합니까? 다른 병렬 트랜잭션이 실행되고있는 경우 어느 쪽도 제약 조건을 위반하려고 서로를 "볼"것입니다. –
@phraktal 거래와 분리되어야합니다. – Kermit