[SQLite] SQL, SQLite 문법

ITmakesmeSoft·2022년 10월 29일
0

SQLite

목록 보기
3/4

SQL

  • Structured Query Language
  • RDBMS의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어
  • 데이터베이스와 상호작용하는 방법을 의미
  • RDBMS에서 데이터베이스 스키마를 생성 및 수정할 수 있으며, 테이블에서의 자료 검색 및 관리도 할 수 있음
  • 데이터베이스 객체에 대한 처리를 관리하거나 접근 권한을 설정하여 허가된 사용자만 RDBMS를 관리할 수 있도록 할 수 있음
  • 많은 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택

SQL 문법

  • 모든 SQL 문(statement)은 SELECT, INSERT, UPDATE등과 같은 키워드로 시작하고, 하나의 SQL문은 세미콜론( ; )으로 끝남
    • Statement(문) : 독립적으로 실행할 수 있는 완전한 코드 조각. 절(Clause)로 구성됨
    • Clause(절) : statement의 하위 단위
    • 세미콜론( ; ) : 각 SQL 문을 구분하는 표준 방법
  • SQL 키워드는 대소문자를 구별하지 않으나, 대문자로 작성하는 것을 권장

SQL Commands

  • DDL(Data Definition Language) : 데이터 정의 언어
  • DML(Data Manipulation Language) : 데이터 조작 언어
  • DCL(Data Control Language) : 데이터 제어 언어

SQL 참고

  1. Boolean type? ⇒ 없음. 0 또는 1로 사용
  2. Date, Time Datatype? ⇒ 없음. 대신 SQLite의 built-in “Date And Time Functions”로 TEXT, REAL 또는 INTEGER값으로 저장할 수 있음
  3. Binary Data? ⇒ 데이터의 저장과 처리를 목적으로 0과 1의 이진형식으로 인코딩 된 파일
    기본적으로 컴퓨터의 모든 데이터는 바이너리 데이터임. 다만 이를 보기 쉽게 텍스트타입으로 변형해서 사용함

SQLite

응용 프로그램에 파일 형식으로 넣어 사용하는 비교적 가벼운 DB

안드로이드, iOS, macOS에 기본 탑재되어 있으며, embedded sw에서도 많이 쓰임

오픈소스 프로젝트로, 자유롭게 사용 가능

  • SQLite 단점
    • 대규모 동시 처리 작업에는 적합하지 않음
    • 다른 RDBMS에서 지원하는 SQL기능을 지원하지 않을 수도 있음

SQLite Data Types

  1. NULL
    1. NULL value
    2. 정보가 없거나 알 수 없음을 의미한다
    3. 값이 따옴표 없이 NULL이면 NULL
  2. INTEGER
    1. 정수
    2. 크기에 따라 0~8바이트와 같은 가변 크기를 가진다
    3. 값에 둘러싸는 따옴표(’’)와 소수점 또는 지수가 없는 경우 INTEGER
  3. REAL
    1. 실수
    2. 8바이트의 부동 소수점을 사용하는 10진수 값이 있는 실수
    3. 값에 따옴표나 소수점, 지수가 없으면 REAL
  4. TEXT
    1. 문자 데이터
    2. 값이 작은 따옴표나 큰따옴표로 묶여있으면 TEXT
  5. BLOB(Binary Large Object)
    1. 입력된 그대로 저장된 데이터 덩어리(대용 타입 없음)
    2. 바이너리 등 멀티미디어 파일(이미지 등)

SQLite Datatypes 특징

  • SQLite는 동적 타입 시스템(Dynamic Type System)을 사용
    • MySQL, PostgreSQL 등과 같은 다른 모든 SQL 데이터베이스 엔진들은 정적이고 엄격한 타입(static, rigid typing)을 사용
  • 컬럼에 선언된 데이터 타입에 의해서가 아닌 컬럼에 저장된 값에 따라 데이터 타입이 결정됨
    • 즉, 동일한 컬럼에 정수 1을 넣을 경우, INTEGER로 타입이 지정되고, 문자 ‘1’을 넣을 경우 TEXT 타입으로 지정됨
  • 동적 타입 시스템을 사용하면 기존의 엄격하게 타입이 지정된 데이터베이스에서는 불가능한 작업을 유연하게 수행 가능함
  • 단, 이는 다른 데이터베이스와의 호환성 문제가 있으므로, 테이블 생성 시 데이터 타입을 지정하는 것을 권장
  • 데이터 타입을 지정하게 되면 SQLite는 입력된 데이터 타입을 지정된 데이터 타입으로 변환
    Column DatatypeTypes Allowed In That Column
    INTEGERINTEGER, REAL, TEXT, BLOB
    REALREAL, TEXT, BLOB
    TEXTTEXT, BLOB
    BLOBINTEGER, REAL, TEXT, BLOB

Type Affinity(타입 선호도)

  • 특정 컬럼에 저장된 데이터에 권장되는 타입
  • 데이터 타입 작성시 SQLite의 5가지 데이터 타입이 아니더라도 내부적으로 각 타입의 지정된 선호도에 따라 5가지 선호도로 인식됨.
  • 이는 다른 정적이고 엄격한 타입의 데이터베이스 엔진과의 호환성을 최대화 하기 위함
    Example Typenames From The CREATE TABLE StatementResulting Affinity
    INT, INTEGER, TINYINT, SMALLINT, MEDIUMINT, BIGINT, UNSIGNED, BIG INT, INT2, INT8INTEGER
    CHARACTER(20), VARCHAR(255), VARYING CHARACTER(255), NCHAR(55), NATIVE CHARACTER(70), NVARCHAR(100), TEXT, CLOBTEXT
    BLOB
    (no datatype specified)BLOB
    REAL, DOUBLE, DOUBLE PRECISION, FLOATREAL
    NUMERIC, DECIMAL(10, 5), BOOLEAN, DATE, DATETIMENUMERIC

제약조건(Constraints)의 종류

  1. NOT NULL
    1. 컬럼이 NULL 값을 허용하지 않도록 지정
    2. 기본적으로 테이블의 모든 컬럼은 NOT NULL 제약 조건을 명시적으로 사용하는 경우를 제외하고는 NULL값을 허용함
  2. UNIQUE
    1. 컬럼의 모든 값이 서로 구별되거나 고유한 값을 가지도록 함
  3. PRIMARY KEY
    1. 테이블에서 행의 고유성을 식별하는 데 사용되는 컬럼
    2. 각 테이블에는 하나의 기본 키만 존재
    3. 암시적으로 NOT NULL 제약 조건이 포함되어 있음
  4. AUTOINCREMENT
    1. 사용되지 않은 값이나 이전에 삭제된 행의 값을 재사용하는 것을 방지
    2. INTEGER PRIMARY KEY 다음에 작성하면 해당 rowid를 다시 재사용하지 못하도록 함
    3. Django에서 테이블 생성 시 id 컬럼에 기본적으로 사용하는 제약조건
  5. 그외 기타 Constraints

rowid의 특징

  • 테이블을 생성할 때마다 rowid라는 암시적 자동 증가 컬럼이 자동으로 생성됨
  • 테이블의 행을 고유하게 식별하는 64비트 부호가 있는 정수 값
  • 테이블에 새 행을 삽입할 때마다 정수 값을 자동으로 할당
    • 값은 1에서 시작
    • 데이터 삽입 시 rowid 또는 INTEGER PRIMARY KEY 컬럼에 명시적으로 값이 지정되지 않은 경우, SQLite는 테이블에서 가장 큰 rowid보다 하나 큰 다음 순차 정수를 자동으로 할당(AUTOINCREMENT와 관계없이)
  • 만약 INTEGER PRIMARY KEY 키워드를 가진 컬럼을 직접 만들 경우 이 컬럼은 rowid 컬럼의 별칭(alias)이 됨
  • 데이터가 최대 값(2642^{64} 행)에 도달하고 새 행을 삽입하려고 하면 SQLite는 사용되지 않는 정수를 찾아 사용
  • 만약 SQLite가 사용되지 않은 정수를 찾을 수 없는 경우, SQLITE_FULL 에러 발생
profile
💎 Daniel LEE | SSAFY 8th

0개의 댓글