[SQL] INITIALLY DEFERRABLE IMMEDIATE 대 NOT DEFERRABLE
SQLINITIALLY DEFERRABLE IMMEDIATE 대 NOT DEFERRABLE
완전한 도서 - 나는 데이터베이스 시스템에서 SQL 키워드 DEFERRABLE에 대해 숙지.
어떻게 INITIALLY DEFERRABLE IMMEDIATE에서 DEFERRABLE 다른 아닌가요? 두 경우 모두, 보인다, 어떤 제약 조건은 각 문 다음에 확인됩니다.
해결법
-
==============================
1.당신이 그것을 필요로 할 때 DEFERRABLE INITIALLY IMMEDIATE를 사용하면 필요에 따라 제약을 지연시킬 수 있습니다.
당신이 그것을 필요로 할 때 DEFERRABLE INITIALLY IMMEDIATE를 사용하면 필요에 따라 제약을 지연시킬 수 있습니다.
이것은 일반적으로 문 시간에 제약을 확인하려는 경우 유용하지만, 예를 들어,에 대한 배치로드 시간이 커밋 될 때까지 검사를 연기하고 싶다.
제약을 연기하는 방법 구문은 비록 다양한 DBMS 다릅니다.
NOT DEFERRABLE하면 지금까지 시간을 커밋 할 때까지 검사를 연기 할 수 없을 것입니다.
-
==============================
2.이외에도 다른 (정확한) 답변에서 PostgreSQL을의 말할 때, 그것은 것을 주장해야한다 :
이외에도 다른 (정확한) 답변에서 PostgreSQL을의 말할 때, 그것은 것을 주장해야한다 :
그래서이 IMMEDIATE로 설정된 경우 DEFERRABLE 제약 조건은 DEFERRABLE NOT 하나 같은 역할을 말할 올바른 아니다.
의이 차이에 정교한 보자 :
CREATE TABLE example( row integer NOT NULL, col integer NOT NULL, UNIQUE (row, col) DEFERRABLE INITIALLY IMMEDIATE ); INSERT INTO example (row, col) VALUES (1,1),(2,2),(3,3); UPDATE example SET row = row + 1, col = col + 1; SELECT * FROM example;
이 올바르게 출력 :
그러나 우리는 IMMEDIATE 명령 INITIALLY 연기를 제거하는 경우,
부 칙 (2017년 10월 12일)
이 동작은 참으로 섹션의 "호환성"여기에 설명되어 있습니다 :
-
==============================
3.이외에도 연기 할 수 있다는 명백한에서의 차이는 실제 성능이다. 모든 제약 조건은 단순히 연기 될 것 - 성능 저하가 아니었다 경우, 필요, 연기 여부를 선택할 수있는 옵션이없는 것으로있을 것입니다.
이외에도 연기 할 수 있다는 명백한에서의 차이는 실제 성능이다. 모든 제약 조건은 단순히 연기 될 것 - 성능 저하가 아니었다 경우, 필요, 연기 여부를 선택할 수있는 옵션이없는 것으로있을 것입니다.
성능 저하는 데이터베이스가 데이터를 제한하는 방법에 대한 지식을 주어진 수행 할 수있는 최적화과 관련이있다. 일시적으로 허용 중복이 허용되어야하기 때문에 제약이, 연기의 경우 예를 들어, 오라클의 고유 제한 조건을 다시 생성되는 인덱스는 고유 인덱스가 될 수 없습니다. 제약 조건, 연기없는 경우에는 다음 인덱스는 고유 할 수 있습니다.
-
==============================
4.나는 매우 늦게 파티에있어하지만 난 그를 추가하고 싶었 - 년 12 월 2018로 -이 표준 SQL 기능의 구현 일정 수준의 서비스가 제공됩니다 (더있을 수 있습니다) 알고 두 데이터베이스를 :
나는 매우 늦게 파티에있어하지만 난 그를 추가하고 싶었 - 년 12 월 2018로 -이 표준 SQL 기능의 구현 일정 수준의 서비스가 제공됩니다 (더있을 수 있습니다) 알고 두 데이터베이스를 :
Database NOT DEFERRABLE DEFERRABLE DEFERRABLE INITIALLY IMMEDIATE INITIALLY DEFERRED ---------- -------------- ------------------- ------------------ Oracle N/A *1 Yes (default) Yes PostgreSQL Yes (default) Yes Yes DB2 - - - SQL Server - - - MySQL - - - MariaDB - - - SAP Sybase - - - HyperSQL - - - H2 - - - Derby - - -
* 1 오라클 12C는 NOT DEFERRABLE 제약 상태를 받아 들인다하더라도, 실제로이를 무시하고 INITIALLY DEFERRABLE로 즉시 작동합니다.
보시다시피, 오라클은 첫 번째 유형 (NOT DEFERRABLE), 오라클 (이 경우 OP)를 사용하여 개발자가 혼란을 얻을 수 있습니다 이유의를 구현하고 처음 두 종류의 동등한 고려하지 않습니다.
흥미롭게도 Oracle과 PostgreSQL은 다른 기본 유형이있다. 아마 성능에 영향이 있습니다.
-
==============================
5.DEFERRABLE NOT - (. 즉 직접 삽입 문 후)는 제약 조건 검사를 변경할 수 없습니다, 각 문 후 오라클 검사를.
DEFERRABLE NOT - (. 즉 직접 삽입 문 후)는 제약 조건 검사를 변경할 수 없습니다, 각 문 후 오라클 검사를.
DEFERRABLE는 INITIALLY IMMEDIATE - 오라클 검사는 각 문 다음에 제약 조건. (. 즉 후 커밋)하지만, 당신은 각 거래 후으로 변경할 수 있습니다 :
set constraint pk_tab1 deferred;
from https://stackoverflow.com/questions/5300307/not-deferrable-versus-deferrable-initially-immediate by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 hstore 확장자를 가진 새 데이터베이스가 이미 설치를 만드는 방법? (0) | 2020.05.31 |
---|---|
[SQL] 파라미터 문은 모든 SQL 주입을 중지 할 수 있습니까? (0) | 2020.05.31 |
[SQL] MySQL은 - 왜 인덱스 모든 분야? (0) | 2020.05.31 |
[SQL] 어떻게 ALTER는 PostgreSQL의 테이블을 수행하고 열이 고유하게 만들기? (0) | 2020.05.31 |
[SQL] 쿼리 결과에서 결과의 무작위 표본을 선택 (0) | 2020.05.31 |