Software/SQLite
-
[SQLite] 동적 자료형 (Dynamic Datatype)Software/SQLite 2018. 5. 20. 20:42
보통 대부분의 테이블 컬럼은 특정 자료형만 저장할 수 있는 정적 자료형(Static datatype)을 사용한다. 즉 Integer 타입으로 선언된 컬럼은 Integer 값만 저장할 수 있고 Float 타입의 값은 저장할 수 없다는 것이다. 그러나 SQLite3에서는 일반적인 다른 DBMS와는 달리 동적 자료형(Dynamic datatype)을 지원하고 있다. SQLite3에서는 테이블을 생성할 때 이전에 했던 것 같이 컬럼의 자료형을 명시하지 않아도 된다. sqlite> CREATE TABLE tblDynamic (id, value); sqlite> INSERT INTO tblDynamic VALUES (1, 'Test'); sqlite> INSERT INTO tblDynamic VALUES ('ind..
-
[SQLite] 락 매커니즘 & 트랜잭션Software/SQLite 2018. 5. 12. 23:11
SQLite3는 기본적으로 다수의 프로세스가 하나의 데이터베이스 파일을 읽고 쓸수 있다. 그런데 만약 다수의 프로세스가 동시에 동일 데이터 베이스 파일에 접속해서 읽거나 쓰게 되면 데이터베이스 무결성이 깨지게 되는 문제가 발생하게 된다. 이러한 문제가 발생하는 것을 막기 위해 데이터베이스를 읽거나 쓰기 위해서는 해당 프로세스가 적절한 잠금(LOCK)권한을 획득하도록 하고 있다. 아래는 프로세스 관점에서 바라 본 데이터베이스 파일의 잠금 상태(Locking states)들이다. 잠금 상태내용 UNLOCKED프로세스가 파일을 열기(Open)만 한 상태이며 읽기/쓰기는 하지 않은 상태 : 다른 프로세스에서 읽기/쓰기 가능 SHARED프로세스에서 파일을 읽고 있는 상태 : 다른 프로세스에서 동시 읽기 가능. 그..
-
[SQLite] 트랜잭션 (TRANSACTION)Software/SQLite 2018. 5. 9. 23:45
데이터베이스에서 트랜잭션 (Transaction)은 SQL 작업의 무결성 (Integrity)을 유지하기 위한 매우 중요한 개념이다. 즉 우리가 현실 세계에서 이루어지는 "거래" 시스템과 마찬가지로 특정 작업이 모두 수행되거나 모두 수행되지 않게 함으로써 그 무결성을 유지하는 것이다. (돈은 냈지만 물건을 받지 않았다면 거래는 성립되지 않는다. 그 반대도 마찬가지이며 거래 당사자들의 이해 조건이 모두 충족된 경우에만 거래가 성립한다.) 트랜잭션 구문 트랜잭션 구문의 시작은 BEGIN 키워드로 시작한다. BEGIN 이후 실행하고자 하는 SQL 구문들을 추가하면 되며 마지막으로 COMMIT 명령어를 통해 트랜잭션이 시작된 이후 수행된 모든 SQL 연상이 데이터베이스 파일(물리적)에 추가된다. 즉 BEGIN ..
-
[SQLite] 트리거 (TRIGGER)Software/SQLite 2018. 4. 16. 00:40
1. 트리거 생성 : 특정 테이블이나 뷰에 INSERT, DELETE, UPDATE와 같은 데이터 변경/조작 같은 동작이 일어 났을 때 미리 지정해둔 동작이 수행되도록 하는 것을 말한다. 사용 방법은 아래와 같다. CREATE TRIGGER [트리거 명] [동작 시점] [SQL 연산] ON [테이블 명] BEGIN [수행 할 SQL 문] END; 먼저 CREATE TRIGGER 키워드 이후 생성하고자 하는 트리거 이름을 지정하게 되는 데 이 트리거 이름은 해당 데이터베이스 내 유일한 값을 가져야 한다. 그 다음에는 이 트리거가 동작할 시점과 SQL 연산, 그리고 동작이 이루어 질 테이블 명을 정의하는데 트리거 동작 시점 옵션은 아래 표를 참고하면 된다. 키워드 의미 BEFORE 대상 테이블의 INSERT..
-
[SQLite] 뷰 (VIEW)Software/SQLite 2018. 3. 25. 16:33
우리는 앞서 내부 조인(Inner Join)부터 외부 조인(Outer Join)까지 다양한 조인 연산들에 대해서 알아 보았다. 당시 우리가 조인 연산에 사용한 테이블은 단 두개로 그리 복잡한 SQL 구문을 작성하지는 않았었다. 그러나 만약 테이블 수가 많아 지고 한 쿼리 구문 내 여러개의 조인 연산들이 들어가게 되면 SQL 구문 작성이 어려워 질 뿐만 아니라 이해하기 어려워 질 가능성이 크다. 이렇게 복잡해진 SQL 구문을 조금 더 쉽고 단순하게 만들어 주기 위한 방법으로 뷰(VIEW)라는 가상 테이블을 만드는 방법이 있다. 이 가상 테이블은 검색 부분을 제외만을 제외하고 나머지 조인 연산 구문을 포함하여 생성되었기에 가상 테이블로의 질의문은 매우 단순해 질 수 있는 장점이 있다. 뷰 생성 뷰(VIEW)..
-
[SQLite] 테이블 제약 조건Software/SQLite 2018. 3. 19. 00:41
보통 테이블 스키마를 작성한 사람과 해당 테이블의 데이터를 입력하고 사용하는 사용자가 다른 경우가 많다. 그렇기에 우리는 최초 테이블 스키마를 작성할 때의 의도와 다르게 사용하는 경우가 많이 생기며 이로 인한 오류도 많이 발생하게 된다. 이러한 오류들을 사전에 방지하기 위해 우리는 특정 컬럼에 제약 조건을 걸어 해당 컬럼이 설정된 조건을 만족하도록 강제할 수 있다. 예를 들어 NULL값이 입력되면 안되는 컬럼의 경우 데이터가 입력이 누락된 경우에는 에러를 발생시킨다 던지 입력이 누락된 컬럼에 대한 기본값을 설정할 수도 있다. 이번 시간에 그러한 테이블 제약조건에 대해서 알아 보고자 한다. NOT NULL NOT NULL 은 반드시 데이터가 존재해야 만 하는 컬럼을 위한 제약 조건이다. 이 해당 제약 조건..
-
[SQLite] 인덱스(INDEX)Software/SQLite 2018. 3. 19. 00:25
인덱스(INDEX)는 우리가 책에서 볼 수 있는 색인을 생각하면 쉽게 이해할 수 있다. 우리는 책의 색인을 통해서 우리가 찾고자 하는 키워드가 어느 페이지에 있는 지 쉽게 찾을 수 있다. SQLite에서의 인덱스 또한 이 색인과 동일한 기능과 역할을 한다. 인덱스를 정의하면 마치 책의 색인과 같은 자료구조 형태로 해당 열을 정렬해서 관리할 수 있다. 그렇기에 인덱스가 정의된 경우 단순 검색보다 더 빠른 검색 결과를 얻을 수 있다. 다만 인덱스를 쓰고 변경하는 데 추가적인 시간이나 공간이 필요하다는 단점이 존재한다. 인덱스 사용의 장/단점 인덱스 사용의 장점 검색 - 일치 검색('='), 범위 검색 ('')의 성능 향상 필터링/정렬 연산의 성능이 향상 인덱스 사용의 단점 레코드 삽입/삭제/변경 시 인덱스를..
-
[SQLite] 외부 조인 (OUTER JOIN)Software/SQLite 2018. 1. 20. 16:59
이전까지의 조인 연산이 종속 테이블의 참조키가 상위 테이블의 기본키를 참조하는 형태이었기에 만약 종속 테이블의 참조키가 NULL인 경우에는 조건 절의 결과 또한 NULL이 되어 해당 결과는 조회되지 않았다. 그러나 외부 조인의 경우는 두 테이블간의 지정된 연결 정보가 없는 데이터도 모두 조회가 가능하다. 즉 만약 정보가 없는 데이터를 포함해서 모든 레코드를 결과로 조회하고 싶은 경우에는 외부 조인을 사용하면 된다. 사용 방법은 FROM 절에서 OUTER JOIN을 추가하면 된다. 이 때 왼쪽 외부 조인(LEFT OUTER JOIN)과 오른쪽 외부 조인(RIGHT OUTHER JOIN), 완전 외부 조인(FULL OUTER JOIN)이 있는데 차이는 아래와 같다. 왼쪽 외부 조인(LEFT OUTER JOI..