prosource

SQL에서 REFUSE 대 INSERT

probook 2023. 9. 25. 22:50
반응형

SQL에서 REFUSE 대 INSERT

저는 다음 SQL 튜토리얼을 하고 있습니다: http://sql.learncodethehardway.org/book/ex11.html

그리고 이 연습문제에서 저자는 두번째 단락에서 다음과 같이 말합니다.

이런 상황에서, 저는 다른 남자로 기록을 교체하고 싶지만 고유한 아이디를 유지하고 싶습니다.문제는 원자로 만들기 위해 트랜잭션에서 DELETE/INSERT를 수행하거나 전체 업데이트를 수행해야 한다는 것입니다.

UPDATE를 할 때 어떤 문제가 있는지, UPDATE 대신 REPLATE을 언제 선택할 수 있는지 설명해 주실 수 있나요?

UPDATE 코드:

UPDATE person SET first_name = "Frank", last_name = "Smith", age = 100
    WHERE id = 0;

다음은 REFRANCE 코드입니다.

REPLACE INTO person (id, first_name, last_name, age)
    VALUES (0, 'Frank', 'Smith', 100);

편집: 인용된 섹션에서 설명한 것처럼 단순히 업데이트만 하는 것이 아니라 왜 DELETE/INSERT를 수행할 것인가 하는 질문이 있습니다.

문서에 따르면 차이점은 다음과 같습니다.

REFRANCE는 표의 이전 행이 Primary KEY 또는 UNIQUE 인덱스의 새 행과 동일한 값을 갖는 경우 새 행을 삽입하기 전에 이전 행이 삭제된다는 점을 제외하고는 INSERT와 동일하게 작동합니다.

따라서 이 기능은 다음과 같습니다.

  • 사용 가능한 인덱스 중 하나를 사용하여 행을 일치시킵니다.
  • 행이 아직 없는 경우 새 행을 추가합니다.
  • 행이 이미 있는 경우 기존 행을 삭제하고 이후에 새 행을 추가합니다.

언제 이것을 사용하면 별도로 사용할 수 있는지 여부insert그리고.update진술?

  • 이를 안전하게 호출할 수 있으며, 기존 행에 대해 걱정할 필요가 없습니다(한 문장 대 두 개).
  • 관련 데이터를 제거하려면 다음과 같이 하십시오.inserting/updating, 사용가능replace: 모든 관련 데이터도 삭제);
  • 트리거가 작동해야 할 때, 그리고 당신이 예상하는 것은insert(나쁜 이유야, 알았어).)

First Replace는 모든 데이터베이스 엔진에서 널리 이해되지 않습니다.

두 번째 교체는 기본 키를 기반으로 레코드를 삽입/업데이트합니다.업데이트를 통해 보다 정교한 조건을 지정할 수 있습니다.

UPDATE person SET first_name = 'old ' + first_name WHERE age > 50

또한 UPDATE는 레코드를 만들지 않습니다.

UPDATE행이 존재하지 않으면 영향을 주지 않습니다.

어디로INSERT아니면REPLACE행이 없으면 삽입하거나 행이 있으면 값을 바꿉니다.

Update는 특정 조건에 따라 테이블의 기존 레코드 값을 변경합니다.따라서 하나 이상의 레코드를 단일 쿼리로 변경할 수 있습니다.

테이블에 레코드가 없으면 Insert(삽입) 또는 Replace(교체)가 새 레코드를 삽입합니다.바꾸기는 기본 키 값을 삽입 또는 바꾸기 쿼리에 제공하는 경우에만 작동합니다. 기본 키 필드 값 추가를 잊어버린 경우 테이블에 새 레코드가 생성됩니다.

사례 예:-

업데이트: 열 값을 사용하여 공식을 기반으로 임금을 계산할 수 있습니다.이 경우 항상 업데이트 쿼리를 사용하게 되며 하나의 쿼리를 사용하면 여러 개의 레코드를 업데이트할 수 있습니다.

삽입 또는 바꾸기:공유하신 링크에 이미 언급되어 있습니다.

REFRACE INTO 문의 작동 방식:

AS INSERT:

REPLACE INTO table_name (column1name, column2name, ...) 
VALUES (value1, value2, ...);

AS 업데이트:

REPLACE INTO table_name SET column1name = value, column2name = value, ... ;

REFREENT 문은 데이터 레코드를 새 레코드로 삽입하거나 업데이트하기 전에 의도된 데이터 레코드의 고유 키 값이 테이블에 이미 존재하는지 확인합니다.

REFRENT INTO 문은 새 레코드를 삽입하거나 기존 레코드를 수정하려고 시도합니다.두 경우 모두 제안된 레코드의 고유 키가 테이블에 이미 존재하는지 확인합니다.NO 또는 FALSE 값이 반환되었다고 가정합니다.이 경우 REFREEN 문은 INSERT INTO 문과 유사한 레코드를 삽입합니다.

키 값이 테이블에 이미 존재한다고 가정합니다(즉, 중복 키).이 경우 REFREEN 문은 기존 데이터 레코드를 삭제하고 새 데이터 레코드로 대체합니다.이것은 첫번째 REFREATE 문 구문을 사용하든 두번째 REFREATE 문 구문을 사용하든 상관없이 발생합니다.

REFREENT INTO 문을 사용하여 데이터를 삽입하거나 수정한 후 새 데이터 레코드가 테이블에 이미 존재하는지 먼저 확인합니다.Primary(프라이머리) 또는 UNIKEY(유니크 키)가 기존 레코드 중 하나와 일치하는지 확인합니다.

일치하는 키가 없는 경우 REFRANCE는 일반 INSERT 문처럼 작동합니다.그렇지 않으면 기존 레코드를 삭제하고 새 레코드로 바꿉니다.이는 기존 레코드의 수정 또는 업데이트의 일종으로 간주됩니다.하지만 여기서 주의해 주시면 가장 좋을 것 같습니다.SET 절에서 열에 대한 값을 지정하지 않는다고 가정합니다.이 경우 REFREEN 문은 기본값(기본값이 설정된 경우)을 사용합니다.그렇지 않으면 NULL로 설정됩니다.

언급URL : https://stackoverflow.com/questions/29539838/replace-versus-insert-in-sql

반응형