소개
이 랩에서는 소규모 애플리케이션에 적합한 경량 서버리스 데이터베이스 엔진인 SQLite 에서 테이블을 생성하고 관리하는 기본적인 기술을 배우게 됩니다. SQLite 데이터 유형을 살펴보고, 기본 키를 사용하여 테이블을 생성하고, NOT NULL 및 UNIQUE 와 같은 제약 조건을 적용하며, .schema 명령을 사용하여 테이블 구조를 검사하고, 안전하게 테이블을 삭제합니다. LabEx VM 환경에서 단계별 연습을 통해 sqlite3 명령줄 도구를 사용하여 데이터베이스 테이블을 구축하고 관리하는 실질적인 경험을 얻게 됩니다. 이 랩은 초보자를 위해 설계되었으며, SQLite 테이블 관리에 대한 명확한 이해를 제공합니다.
SQLite 에 연결하고 연락처 테이블 생성하기
이 첫 번째 단계에서는 SQLite 데이터베이스에 연결하고 contacts라는 이름의 첫 번째 테이블을 생성합니다. SQLite 는 데이터를 단일 파일에 저장하는 경량 데이터베이스 엔진입니다. sqlite3 명령줄 도구를 사용하여 데이터베이스와 상호 작용합니다.
LabEx VM 환경에서 터미널을 엽니다. 기본 작업 디렉토리
/home/labex/project에 있는지 확인합니다.sqlite3도구를 사용하여test.db라는 SQLite 데이터베이스에 연결합니다. 이 명령은 데이터베이스 파일이 아직 존재하지 않는 경우 생성합니다.sqlite3 test.db이 명령은 SQLite 셸을 열고,
sqlite>와 같은 프롬프트가 표시되어 SQLite 환경 내에 있음을 나타냅니다.id,name,phone열이 있는contacts라는 테이블을 생성합니다.sqlite>프롬프트에서 다음 SQL 명령을 입력합니다.CREATE TABLE contacts ( id INTEGER PRIMARY KEY, name TEXT, phone TEXT );이 명령은
contacts라는 테이블을 생성합니다.id열은 정수이며PRIMARY KEY로 지정됩니다. 즉, 테이블의 각 행을 고유하게 식별합니다.name및phone열은 모두TEXT유형이며, 모든 문자열 데이터를 저장할 수 있습니다.명령을 자세히 살펴보겠습니다.
CREATE TABLE contacts: SQLite 에contacts라는 새 테이블을 생성하도록 지시합니다.id INTEGER PRIMARY KEY:INTEGER데이터 유형의id라는 열을 정의합니다.PRIMARY KEY제약 조건은 이 열의 각 값이 고유하고 각 행의 기본 식별자로 사용되도록 보장합니다.name TEXT:TEXT데이터 유형의name이라는 열을 정의하며, 모든 문자열 데이터를 저장할 수 있습니다.phone TEXT:TEXT데이터 유형의phone이라는 열을 정의하며, 모든 문자열 데이터를 저장할 수 있습니다.
연락처 테이블에 데이터 삽입하기
이제 contacts 테이블을 생성했으므로, 여기에 데이터를 삽입해 보겠습니다. INSERT INTO 문을 사용하여 테이블에 새 행을 추가합니다.
contacts테이블에 새 연락처를 삽입합니다.sqlite>프롬프트에서 이 명령을 실행합니다.INSERT INTO contacts (name, phone) VALUES ('John Doe', '123-456-7890');이 명령은 이름이 'John Doe'이고 전화번호가 '123-456-7890'인 새 행을
contacts테이블에 삽입합니다.id열은 기본 키이므로 고유한 값이 자동으로 할당됩니다.명령을 자세히 살펴보겠습니다.
INSERT INTO contacts: SQLite 에contacts테이블에 데이터를 삽입하도록 지시합니다.(name, phone): 데이터를 삽입할 열을 지정합니다.VALUES ('John Doe', '123-456-7890'): 해당 열에 삽입할 값을 지정합니다.
contacts테이블에 다른 연락처를 삽입합니다.INSERT INTO contacts (name, phone) VALUES ('Jane Smith', '987-654-3210');이 명령은 이름이 'Jane Smith'이고 전화번호가 '987-654-3210'인 다른 행을
contacts테이블에 삽입합니다.
연락처 테이블에서 데이터 검색하기
이제 contacts 테이블에 데이터를 삽입했으므로, 이를 검색해 보겠습니다. SELECT 문을 사용하여 테이블을 쿼리하고 데이터를 표시합니다.
contacts테이블에서 모든 데이터를 검색합니다.sqlite>프롬프트에서 이 명령을 실행합니다.SELECT * FROM contacts;이 명령은
contacts테이블에서 모든 열 (*) 을 선택하고 결과를 표시합니다.예상 출력:
1|John Doe|123-456-7890 2|Jane Smith|987-654-3210출력은 삽입한 두 연락처와 자동으로 할당된
id값을 보여줍니다.명령을 자세히 살펴보겠습니다.
SELECT *: SQLite 에 테이블에서 모든 열을 선택하도록 지시합니다.FROM contacts: 데이터를 검색할 테이블을 지정합니다.
contacts테이블에서name및phone열만 검색합니다.SELECT name, phone FROM contacts;이 명령은
contacts테이블에서name및phone열만 선택하고 결과를 표시합니다.예상 출력:
John Doe|123-456-7890 Jane Smith|987-654-3210
제약 조건이 있는 사용자 테이블 생성
제약 조건은 테이블에서 데이터 무결성을 적용하는 규칙입니다. 새로운 users 테이블에 NOT NULL 및 UNIQUE 제약 조건을 추가해 보겠습니다.
제약 조건이 있는
users라는 테이블을 생성합니다.sqlite>프롬프트에서 이 명령을 실행합니다.CREATE TABLE users ( id INTEGER PRIMARY KEY, username TEXT NOT NULL UNIQUE, email TEXT NOT NULL, age INTEGER );이 명령은 다음과 같은 제약 조건이 있는
users라는 테이블을 생성합니다.username은NULL일 수 없으며UNIQUE해야 합니다.email은NULL일 수 없습니다.
명령을 자세히 살펴보겠습니다.
CREATE TABLE users: SQLite 에users라는 새 테이블을 생성하도록 지시합니다.id INTEGER PRIMARY KEY:INTEGER데이터 유형을 가진id라는 열을 정의합니다.PRIMARY KEY제약 조건은 이 열의 각 값이 고유하고 각 행의 기본 식별자로 사용되도록 보장합니다.username TEXT NOT NULL UNIQUE:TEXT데이터 유형을 가진username이라는 열을 정의합니다.NOT NULL제약 조건은 이 열이 비어 있을 수 없도록 보장하고,UNIQUE제약 조건은 이 열의 모든 값이 서로 다르도록 보장합니다.email TEXT NOT NULL:TEXT데이터 유형을 가진email이라는 열을 정의합니다.NOT NULL제약 조건은 이 열이 비어 있을 수 없도록 보장합니다.age INTEGER:INTEGER데이터 유형을 가진age라는 열을 정의합니다.
이제 이러한 제약 조건을 위반하는 데이터를 삽입하여 제약 조건이 어떻게 작동하는지 살펴보겠습니다. 먼저, 사용자 이름을 지정하지 않고 사용자를 삽입해 보겠습니다.
INSERT INTO users (email, age) VALUES ('test@example.com', 25);username열이NOT NULL로 정의되어 있으므로 오류가 발생합니다.예상 출력:
Error: NOT NULL constraint failed: users.username이 오류는 SQLite 가
username에NOT NULL제약 조건을 적용하여 삽입을 방지함을 보여줍니다.다음으로, 중복된 사용자 이름으로 사용자를 삽입해 보겠습니다. 먼저, 유효한 사용자를 삽입합니다.
INSERT INTO users (username, email, age) VALUES ('johndoe', 'john.doe@example.com', 30);그런 다음, 동일한 사용자 이름으로 다른 사용자를 삽입하려고 시도합니다.
INSERT INTO users (username, email, age) VALUES ('johndoe', 'jane.doe@example.com', 25);username열이UNIQUE로 정의되어 있으므로 오류가 발생합니다.예상 출력:
Error: UNIQUE constraint failed: users.username이 오류는 SQLite 가
username에UNIQUE제약 조건을 적용하여 중복 값을 방지함을 보여줍니다.
.schema 명령어로 테이블 구조 검사
.schema 명령을 사용하여 테이블의 구조를 검사할 수 있습니다. 이 명령은 열 이름, 데이터 유형 및 제약 조건을 포함하여 테이블을 생성하는 데 사용된 SQL 문을 표시합니다.
users테이블의 구조를 검사합니다.sqlite>프롬프트에서 이 명령을 실행합니다..schema users예상 출력:
CREATE TABLE users ( id INTEGER PRIMARY KEY, username TEXT NOT NULL UNIQUE, email TEXT NOT NULL, age INTEGER );출력은
username열에 대한NOT NULL및UNIQUE제약 조건을 포함하여users테이블에 대한CREATE TABLE문을 보여줍니다..schema명령은 테이블의 구조를 이해하고 제약 조건이 올바르게 정의되었는지 확인하는 데 유용한 도구입니다.SQLite 셸을 종료합니다.
.quit이 명령은 SQLite 셸을 종료하고 Linux 터미널로 돌아갑니다.
중요: "계속 (Continue)" 버튼을 클릭하기 전에
.quit을 실행하십시오. 그렇지 않으면 sqlite 기록이 기록되지 않으므로 단계를 확인할 수 없습니다.
contacts 테이블 삭제
DROP TABLE 명령을 사용하여 데이터베이스에서 테이블을 삭제할 수 있습니다. 이 명령은 테이블과 모든 데이터를 영구적으로 삭제하므로 주의해서 사용하십시오.
test.db데이터베이스에 연결합니다.sqlite3 test.dbcontacts테이블을 삭제합니다.sqlite>프롬프트에서 이 명령을 실행합니다.DROP TABLE contacts;이 명령은
contacts테이블과 모든 데이터를 데이터베이스에서 삭제합니다.경고: 이 작업은 되돌릴 수 없습니다. 테이블을 삭제하면 해당 테이블이나 데이터를 복구할 수 없습니다.
contacts테이블이 삭제되었는지 확인하기 위해 테이블에서 선택을 시도합니다.SELECT * FROM contacts;contacts테이블이 더 이상 존재하지 않으므로 오류가 발생합니다.SQLite 셸을 종료합니다.
.quit
요약
이 랩에서는 SQLite 에서 테이블을 구축하고 관리하는 기본적인 기술을 배웠습니다. SQLite 데이터 유형을 탐색하고, 기본 키로 테이블을 생성하고, NOT NULL 및 UNIQUE 와 같은 제약 조건을 적용하고, .schema 명령을 사용하여 테이블 구조를 검사하고, 테이블을 안전하게 삭제했습니다. 이러한 기술은 SQLite 데이터베이스로 작업하고 데이터 기반 애플리케이션을 구축하는 데 필수적입니다.


