SQLite INSERT, UPDATE, DELETE 쿼리 예제

데이터 수정 조항 SQLite INSERT, UPDATE 및 DELETE 문입니다. 새 행 삽입, 기존 값 업데이트 또는 데이터베이스에서 행 삭제에 사용됩니다.

다음 모든 예제에서 sqlite3.exe를 실행하고 샘플 데이터베이스에 대한 연결을 다음과 같이 열어야 합니다.

단계 1) 이 단계에서,

  1. 내 컴퓨터를 열고 다음 디렉토리로 이동합니다.C:\sqlite"및
  2. 그런 다음 “sqlite3.exe":

SQLite 쿼리 - 삽입, 업데이트, 삭제

단계 2) 데이터베이스 열기 “튜토리얼SampleDB.db다음 명령을 사용하여:

.open TutorialsSampleDB.db

SQLite 쿼리 - 삽입, 업데이트, 삭제

이제 데이터베이스에서 모든 유형의 쿼리를 실행할 준비가 되었습니다.

SQLite INSERT

SQLite INSERT는 데이터베이스의 지정된 테이블에 레코드를 삽입하는 데 사용됩니다. 'INSERT' 절을 사용해야 합니다. INSERT 절 구문은 다음과 같습니다.

SQLite INSERT

  • INSERT 절 뒤에는 값을 삽입해야 하는 테이블을 명시해야 합니다.
  • 열 목록을 작성한 테이블 이름 뒤에 값을 삽입하려고 합니다.
  • 열 이름을 무시하고 쓰지 않을 수 있습니다.
  • 열 이름을 쓰지 않으면 테이블에 있는 모든 열에 동일한 순서로 값이 삽입되고 해당 열은 테이블에 정의됩니다.
  • VALUES 절 뒤에는 삽입할 값을 나열해야 합니다.
  • 각 INSERT 절은 하나의 행만 삽입합니다. 여러 행을 삽입하려면 각 행마다 하나씩 여러 INSERT 절을 작성해야 합니다.

SQLite 예시 삽입

다음 예에서는 학생 테이블에 학생 한 명당 한 행씩, 총 두 개의 행을 삽입합니다.

INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth)
              VALUES(11, 'Ahmad', 4, '1997-10-12');

INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');

이 작업은 성공적으로 실행되어야 하며 이에 대한 출력은 없습니다.

SQLite 끼워 넣다

이렇게 하면 두 명의 학생이 삽입됩니다.

  • StudentId=11, StudentName = Ahmad, DepartmentId = 4, DateOfBirth = 1997-10-12인 첫 번째 학생입니다.
  • StudentId=12, StudentName = Aly, DepartmentId = 4, DateOfBirth = 1996-10-12′인 두 번째 학생입니다.

첫 번째 명령문에서는 "라는 열 이름을 나열했습니다.학생 ID, 학생 이름, 부서 ID, 생년월일“.그러나 두 번째 진술에서는 그렇지 않았습니다.

네 가지 가치 “12, '알리', 4, '1996-10-12'"는 열이 정의된 것과 동일한 순서로 Students 테이블의 XNUMX개 열 모두에 삽입됩니다.

이제 다음을 실행하여 두 학생이 Students 테이블에 삽입되었는지 확인해 보겠습니다. 질문:

SELECT * FROM Students;

그러면 해당 쿼리에서 두 학생이 다음과 같이 반환된 것을 볼 수 있습니다.

SQLite 끼워 넣다

SQLite 업데이트

SQLite UPDATE 쿼리는 테이블의 기존 레코드를 수정하는 데 사용됩니다. UPDATE 쿼리와 함께 WHERE 절을 사용하여 선택한 행을 업데이트할 수 있습니다. UPDATE 절은 특정 열의 값을 변경하여 테이블을 업데이트합니다. 다음은 UPDATE 절의 구문입니다.

SQLite 업데이트

다음과 같습니다:

  • “update 절” 뒤에는 업데이트할 테이블 이름을 적어야 합니다.
  • 업데이트할 컬럼명과 업데이트할 값을 적는 “SET 절”을 작성해야 합니다.
  • 둘 이상의 열을 업데이트할 수 있습니다. 각 줄 사이에 쉼표를 사용할 수 있습니다.
  • WHERE 절을 지정하여 일부 행만 지정할 수 있습니다. 식이 true로 평가되는 행만 업데이트됩니다. WHERE 절을 지정하지 않은 경우 모든 행이 업데이트됩니다.

SQLite 업데이트 예시

다음 UPDATE 문에서는 StudentId = 6인 Student의 DepartmentId를 3으로 업데이트합니다.

UPDATE Students
SET DepartmentId = 3 
WHERE StudentId = 6;

이 작업은 성공적으로 실행되어야 하며 어떤 출력도 나오지 않아야 합니다.

SQLite 업데이트

UPDATE 절에서 Students 테이블을 업데이트하겠다고 지정했습니다.

  • WHERE 절에서는 StudentId = 6에 해당하는 행만 선택하도록 모든 학생을 필터링했습니다.
  • SET 절은 선택한 학생의 부서 ID 값을 3으로 업데이트합니다.

이제 다음 명령을 실행하여 ID가 ​​6인 학생이 업데이트되었는지 확인해 보겠습니다.

SELECT * FROM Students WHERE StudentId = 6;

이제 부서 ID 값이 다음과 같이 3으로 표시된 것을 확인할 수 있습니다.

SQLite 업데이트

SQLite .

SQLite DELETE 쿼리는 지정된 테이블에서 기존 레코드를 제거하는 데 사용됩니다. DELETE 쿼리와 함께 WHERE 절을 사용하여 선택한 행을 삭제할 수 있습니다.

DELETE 절의 구문은 다음과 같습니다.

SQLite .

  • DELETE FROM 절 뒤에 레코드를 삭제하려는 테이블 이름을 적어야 합니다. (참고 :DELETE 절 테이블에서 일부 레코드를 삭제하거나 모든 레코드를 삭제하는 데 사용되며 테이블 자체는 삭제되지 않습니다. 그러나, 그 DROP 절 모든 레코드가 포함된 전체 테이블을 삭제하는 데 사용됩니다.)
  • “DELETE FROM guru”와 같은 DELETE 절을 작성하면 “guru” 테이블의 모든 레코드가 삭제됩니다.
  • 일부 특정 행을 삭제하려는 경우 표현식에 WHERE 조건을 지정할 수 있습니다. 표현식이 true로 평가되는 행만 삭제됩니다. 예를 들어, "DELETE FROM guru WHERE id > 5" - ID가 5보다 큰 레코드만 삭제됩니다.

예시

다음 문장에서는 StudentId가 11과 12인 두 학생을 삭제합니다.

DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;

표현식 "학생 ID = 11 또는 학생 ID = 12”는 ID가 11과 12인 학생에게만 해당됩니다. 따라서 DELETE 절은 두 학생 모두에 적용되어 학생만 삭제됩니다.

이 명령은 성공적으로 실행되어야 하며 다음과 같은 출력이 나오지 않아야 합니다.

SQLite .

다음과 같이 Students 테이블에서 모든 레코드를 선택하면 두 학생이 삭제되었는지 확인할 수 있습니다.

SELECT * FROM Students;

다음과 같이 ID가 11과 12인 두 학생이 표시되어서는 안 됩니다.

SQLite .

SQLite 충돌 조항

다음 열 제약 조건 중 하나가 있는 열이 있다고 가정해 보겠습니다: UNIQUE, NOT NULL, CHECK 또는 PRIMARY KEY. 그리고 이 제약 조건과 충돌하는 값으로 해당 열에 값을 삽입하거나 업데이트하려고 했습니다.

예를 들어 열에 UNIQUE 제약 조건이 있고 이미 존재하는 값(중복 값)을 삽입하려고 하면 UNIQUE 제약 조건과 충돌합니다. 그런 다음 CONFLICT 절을 사용하면 이러한 경우 충돌을 해결하기 위해 수행할 작업을 선택할 수 있습니다.

CONFLICT 절이 충돌을 해결하는 방법을 계속 설명하기 전에. 데이터베이스 트랜잭션이 무엇인지 이해해야 합니다.

데이터베이스 트랜잭션

데이터베이스 트랜잭션이라는 용어는 SQLite 작업(삽입, 업데이트 또는 삭제). 데이터베이스 트랜잭션은 하나의 단위로 실행되어야 하며, 모든 작업이 성공적으로 실행되거나 전혀 실행되지 않아야 합니다. 작업 중 하나가 실행되지 않으면 모든 작업이 취소됩니다.

데이터베이스 트랜잭션의 예

한 은행 계좌에서 다른 은행 계좌로 돈을 이체하는 거래에는 몇 가지 활동이 포함됩니다. 이 거래 작업에는 첫 번째 계좌에서 돈을 인출하고 다른 계좌에 입금하는 것이 포함됩니다. 이 거래는 완전히 완료되거나 완전히 취소되어야 하며 중간에 실패해서는 안 됩니다.

CONFLICT 절에서 선택할 수 있는 XNUMX가지 해결 방법 목록은 다음과 같습니다.

  1. 롤백 – 현재 트랜잭션이 롤백됩니다. SQLite 충돌이 있는 명세서(전체 거래가 취소됩니다). 예를 들어, 10개 행을 업데이트하려고 하는데 다섯 번째 행에 제약 조건과 충돌하는 값이 있는 경우 어떤 행도 업데이트되지 않고 10개 행은 동일하게 유지됩니다. 오류가 발생합니다.
  2. 중단 – 현재를 중단(취소)합니다. SQLite 충돌이 있는 명세서만 삭제되며 거래는 취소되지 않습니다. 예를 들어, 10개 행을 업데이트하려고 하는데 다섯 번째 행에 제약 조건과 충돌하는 값이 있는 경우 다섯 번째 값만 업데이트되지 않고 나머지 9개 행은 업데이트됩니다. 오류가 발생합니다.
  3. 실패하다 - 현재를 중단합니다 SQLite 충돌이 있는 진술입니다. 그러나 트랜잭션은 계속되지 않지만 충돌이 발생한 행 이전의 행에 대한 이전 변경 사항은 커밋됩니다. 예를 들어, 10개 행을 업데이트하려고 하는데 다섯 번째 행에 제약 조건과 충돌하는 값이 있는 경우 4개 행만 업데이트되고 다른 행은 업데이트되지 않습니다. 오류가 발생합니다.
  1. 무시 – 이렇게 하면 제약 조건 위반이 포함된 행을 건너뛰고 그 뒤의 다른 행을 계속 처리합니다. SQLite 성명. 예를 들어, 10개 행을 업데이트하려고 하는데 다섯 번째 행에 제약 조건과 충돌하는 값이 있는 경우 4개 행만 업데이트되고 다른 행은 업데이트되지 않습니다. 더 이상 다른 행을 업데이트하지 않고 충돌 값이 있는 행에서 중지됩니다. 오류가 발생하지 않습니다.
  1. 교체 – 위반이 있는 제약 조건의 유형에 따라 다릅니다.
  • UNIQUE 또는 PRIMARY KEY 제약 조건에 대한 제약 조건 위반이 있는 경우. REPLACE는 위반을 일으키는 행을 새로 삽입되거나 업데이트된 행으로 바꿉니다.
  • NOT NULL 제약 조건 위반이 있는 경우 REPLACE 절은 NULL 값을 해당 열의 기본값으로 바꿉니다. 열에 기본값이 없으면 SQLite 문을 중단합니다(문이 취소됩니다).
  • CHECK 제약 조건 위반이 발생하면 해당 절이 중단됩니다.

참고 : 위의 5가지 해결 방법은 충돌을 어떻게 해결하려는지에 대한 옵션입니다. 하나의 충돌을 해결하는 데 적용 가능한 것이 반드시 다른 유형의 충돌을 해결하는 데 적용되는 것은 아닐 수도 있습니다.

CONFLICT 절을 선언하는 방법

CREATE TABLE 절 내에서 열 정의에 대한 제약 조건을 정의할 때 ON CONFLICT 절을 선언할 수 있습니다. 다음 구문을 사용합니다.

SQLite 충돌 조항

앞에서 설명한 대로 XNUMX가지 해결 방법 중 하나를 선택하여 충돌을 해결할 수 있습니다.

충돌 시 무시 예

단계 1) 다음과 같이 새 테이블 제목을 만듭니다.

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE,
    [SubjectName] NVARCHAR NOT NULL
);

SubjectId 열에 PRIMARY KEY 제약 조건을 정의했습니다. 기본 키 제약 조건은 두 개의 중복 값이 ​​SubjectId 열에 삽입되는 것을 허용하지 않으므로 해당 열의 모든 값은 고유해야 합니다. 또한 충돌 해결 방법을 '무시".

명령이 성공적으로 실행되고 오류가 발생하지 않아야 합니다.

충돌 시 무시 예

단계 2) 이제 새 테이블 주제에 일부 값을 삽입해 보겠습니다. 단, 이 값은 기본 키 제약 조건을 위반합니다.

INSERT INTO Subjects VALUES(1, 'Algebra');
INSERT INTO Subjects VALUES(2, 'Database Course');
INSERT INTO Subjects VALUES(2, 'Data Structures');
INSERT INTO Subjects VALUES(4, 'Algorithms');

이 INSERT 문에서 우리는 동일한 기본 키 주제 ID 2를 가진 두 강좌를 삽입하려고 시도했는데, 이는 기본 키 제약 조건을 위반하는 것입니다.

명령은 정상적으로 실행되어야 하며 오류가 발생하지 않아야 합니다. 다음과 같습니다.

충돌 시 무시 예

단계 3) 다음과 같이 표에서 모든 주제를 선택하십시오.

SELECT * FROM Subjects;

그러면 주제 목록이 제공됩니다.

충돌 시 무시 예

XNUMX개의 주제만 삽입되었음을 알 수 있습니다.대수학, 데이터베이스 코스 및 Algorithms” 4개 행 대신.

기본키 제약조건인 '데이터 구조'를 위반하는 값이 있는 행은 무시되어 삽입되지 않았습니다. 하지만, SQLite 해당 행 이후의 다른 명령문을 계속 실행합니다.

단계 4) 다음 명령을 실행하여 다른 ON CONFLICT 절을 사용하여 테이블 subjects를 삭제하고 다시 만듭니다.

DROP TABLE Subjects;

drop 명령은 전체 테이블을 삭제합니다. 이제 테이블 주제가 존재하지 않습니다.

충돌 교체 예

단계 1) 다음과 같이 새 테이블 제목을 만듭니다.

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE,
    [SubjectName] NVARCHAR NOT NULL
);

SubjectId 열에 PRIMARY KEY 제약 조건을 정의했습니다. 기본 키 제약 조건은 두 개의 중복 값이 ​​SubjectId 열에 삽입되는 것을 허용하지 않으므로 해당 열의 모든 값은 고유해야 합니다.

또한 충돌 해결 옵션을 '교체“. 명령이 성공적으로 실행되고 오류가 발생하지 않아야 합니다.

충돌 교체 예

단계 2) 이제 새 테이블인 Subjects에 일부 값을 삽입해 보겠습니다. 단, 이 값은 기본 키 제약 조건을 위반합니다.

INSERT INTO Subjects VALUES(1, 'Algebra');
INSERT INTO Subjects VALUES(2, 'Database Course');
INSERT INTO Subjects VALUES(2, 'Data Structures');
INSERT INTO Subjects VALUES(4, 'Algorithms');

이 INSERT 문에서 우리는 동일한 기본 키 주제 ID 2를 가진 두 강좌를 삽입하려고 시도했는데, 이는 기본 키 제약 조건을 위반하는 것입니다.

명령은 정상적으로 실행되어야 하며 오류가 발생하지 않아야 합니다. 다음과 같습니다.

충돌 교체 예

단계 3) 다음과 같이 표에서 모든 주제를 선택하십시오.

SELECT * FROM Subjects;

그러면 주제 목록이 제공됩니다.

충돌 교체 예

XNUMX개의 주제만 삽입되었음을 알 수 있습니다.대수학, 데이터 구조 및 Algorithms” 반면 우리는 4개의 행을 삽입하려고 했습니다.

기본 키 제약 조건을 위반하는 값이 있는 행, 즉 "데이터 구조" 값을 "로 바꾸었습니다.데이터베이스 과정” 다음과 같습니다:

  • 처음 두 개의 insert 문은 문제 없이 잘 실행됩니다. 두 과목 대수학, 데이터베이스 과정이 ID 1, 2로 삽입됩니다.
  • 인셀덤 공식 판매점인 SQLite SubjectId 2 및 SubjectName "을 사용하여 세 번째 삽입 문을 실행하려고 합니다.데이터 구조", SubjectId = 2인 주제가 이미 있음을 확인합니다. 이는 SubjectId 열에 정의된 기본 키 제약 조건에 대한 위반입니다.
  • SQLite 이 충돌에 대해 REPLACE 해결 방법을 선택합니다. subject 테이블에 이미 존재하는 값을 insert 문의 새 값으로 바꿉니다. 그래서 "데이터베이스 과정” 제목 이름은 “으로 대체됩니다.데이터 구조” 제목 이름.

제품 개요

INSERT, UPDATE, DELETE 절은 데이터를 수정하는 데 사용됩니다. SQLite 데이터베이스. CONFLICT 절은 데이터와 수정하려는 데이터 사이의 충돌을 해결하는 강력한 절입니다.