SQLite 예제를 사용하여 테이블 생성, 변경, 삭제

⚡ 스마트 요약

SQLite 테이블 관리는 세 가지 데이터 정의 명령, 즉 테이블을 정의하는 CREATE TABLE, 테이블 이름을 바꾸거나 열을 추가 및 변경하는 ALTER TABLE, 그리고 데이터베이스에서 테이블을 완전히 제거하는 DROP TABLE에 의존합니다.

  • 📐 테이블 생성: CREATE TABLE 문은 테이블 이름과 열을 정의하며, 각 열에는 이름과 데이터 형식이 필요합니다.
  • 🛡️ 오류를 피하세요: CREATE TABLE 문에 IF NOT EXISTS를 추가하거나 DROP TABLE 문에 IF EXISTS를 추가하면 테이블이 이미 존재하거나 누락된 경우 발생하는 오류를 방지할 수 있습니다.
  • ✏️ 테이블 수정: ALTER TABLE 명령은 테이블 이름을 변경하고 열을 추가하며, 최신 버전에서는 다음과 같습니다. SQLite 단일 열의 이름을 변경하거나 삭제합니다.
  • 🗑️ 테이블 삭제: DROP TABLE 명령어는 테이블과 해당 테이블에 속한 모든 행 및 인덱스를 영구적으로 삭제합니다.
  • 📑 테이블 복사: `CREATE TABLE AS SELECT`는 쿼리에서 반환된 열과 행을 사용하여 새 테이블을 생성합니다.
  • 🤖 AI 지원: AI 기반 텍스트-SQL 도우미와 GitHub Copilot은 일반 영어 입력을 기반으로 CREATE, ALTER, DROP 문을 생성합니다.

SQLite 테이블 생성, 수정, 삭제

아래 섹션에서는 테이블을 생성하고, 구조를 수정하고, 테이블을 삭제하는 방법을 보여줍니다. SQLite3장에서는 CREATE TABLE, ALTER TABLE, DROP TABLE 명령어를 예제와 함께 다룹니다.

SQLite 표 만들기

통사론

다음은 CREATE TABLE 문의 구문입니다.

CREATE TABLE table_name(
column1 datatype,
column1 datatype
);

테이블을 생성하려면 다음과 같이 "CREATE TABLE" 쿼리를 사용해야 합니다.

CREATE TABLE guru99 (
  Id Int,
  Name Varchar
);

테이블 이름 뒤에 있는 두 개의 괄호 안에 테이블의 열을 정의합니다. 각 열은 다음 속성을 가져야 합니다.

  • 이름, 열 이름은 테이블의 열 중에서 고유해야 합니다.
  • 데이터 형식 – 열 데이터 형식.
  • 이 튜토리얼의 뒷부분에서 설명할 선택적 열 제약 조건이 있습니다.

SQLite 테이블이 존재하지 않으면 생성

스크립트가 두 번 이상 실행될 경우, 테이블이 이미 존재하면 일반적인 CREATE TABLE 문은 실패하고 오류와 함께 중지됩니다. SQLite 이 문제는 선택적 IF NOT EXISTS 절을 사용하여 해결할 수 있습니다. 이 절은 테이블이 없을 때만 테이블을 생성하고 이미 있는 경우에는 아무 작업도 수행하지 않습니다.

CREATE TABLE IF NOT EXISTS guru99 (
  Id Int,
  Name Varchar
);

위 구문은 "테이블이 이미 존재합니다" 오류를 발생시키지 않으므로 설정 또는 마이그레이션 스크립트의 맨 위에 두어도 안전합니다.

테이블을 삭제할 때도 같은 원리가 반대로 적용됩니다. DROP TABLE 문에 IF EXISTS를 추가하면 테이블이 이미 삭제된 경우에도 오류가 발생하지 않습니다.

DROP TABLE IF EXISTS guru99;

두 절 모두 자동화 스크립트에서 흔히 사용되는데, 이는 동일한 파일을 수동으로 정리하지 않고도 반복적으로 실행할 수 있게 해주기 때문입니다.

드롭 테이블

테이블을 삭제하려면 다음과 같이 "DROP TABLE" 명령 다음에 테이블 이름을 입력합니다.

DROP TABLE guru99;

테이블 변경

"ALTER TABLE" 명령어를 사용하여 다음과 같이 테이블 이름을 변경할 수 있습니다.

ALTER TABLE guru99 RENAME TO guru100;

테이블 이름이 변경되었는지 확인하려면 ".tables" 명령어를 사용하여 테이블 목록을 표시하면 됩니다. 그러면 테이블 이름이 다음과 같이 변경된 것을 확인할 수 있습니다.

SQLite .tables 출력 결과는 테이블 이름이 guru99에서 guru100으로 변경되었음을 보여줍니다.

보시는 바와 같이 "alter table" 명령을 실행한 후 테이블 이름 "guru99"가 "guru100"으로 변경되었습니다.

SQLite 열 추가 - ALTER TABLE 명령 사용

또한 "ALTER TABLE" 명령을 사용하여 열을 추가할 수도 있습니다.

ALTER TABLE guru100 ADD COLUMN Age INT;

이렇게 하면 "guru100" 테이블이 수정되어 "Age"라는 새 열이 추가됩니다.

아무런 출력이 표시되지 않으면 명령이 성공적으로 실행되어 열이 추가된 것입니다. 출력이 없다는 것은 커서가 "sqlite>" 뒤에 위치하고 그 뒤에 아무 텍스트도 표시되지 않는다는 의미입니다. 예를 들어 다음과 같습니다.

SQLite ALTER TABLE ADD COLUMN 명령이 성공적으로 실행된 후에도 명령줄에 아무런 출력이 표시되지 않습니다.

하지만 열이 추가되었는지 확인하려면 ".schema guru100" 명령어를 사용할 수 있습니다. 이 명령어를 실행하면 테이블 정의가 표시되고, 방금 추가한 새 열이 보일 것입니다.

SQLite .schema guru100 출력 결과는 테이블에 새로운 Age 열이 추가되었음을 보여줍니다.

SQLite 테이블 변경: 열 이름 변경 및 삭제

열을 추가하는 것 외에도, 최신 버전에서는 SQLite 또한 단일 열의 이름을 변경하거나 열을 삭제할 수도 있습니다. 열 이름 변경 기능은 다음 버전부터 사용할 수 있습니다. SQLite 3.25 버전에서는 테이블 정의 내부의 이름뿐만 아니라 해당 열을 참조하는 모든 인덱스, 트리거 및 뷰의 이름도 업데이트합니다.

ALTER TABLE guru100 RENAME COLUMN Name TO FullName;

열을 제거하려면, SQLite 3.35 버전 이상에서는 DROP COLUMN 절을 직접 사용할 수 있습니다.

ALTER TABLE guru100 DROP COLUMN Age;

열이 기본 키, 고유 제약 조건 또는 인덱스의 일부인 경우 해당 열을 삭제할 수 없습니다. 이전 버전에서는 SQLite DROP COLUMN 명령어가 없는 버전의 경우, 일반적인 해결 방법은 원하는 열만 있는 새 테이블을 만들고, 행을 복사한 다음, 기존 테이블을 삭제하고, 마지막으로 새 테이블의 이름을 변경하는 것입니다.

테이블을 복사하는 방법 SQLite CREATE TABLE AS SELECT 구문을 사용합니다.

때로는 위험한 변경 작업을 하기 전에 백업용으로 또는 새 테이블을 만드는 시작점으로 테이블의 복사본이 필요할 수 있습니다. SQLite CREATE TABLE AS SELECT 구문을 사용하면 한 단계로 테이블을 생성할 수 있습니다. 이 구문은 쿼리에서 가져온 열로 새 테이블을 만들고 쿼리가 반환하는 행으로 테이블을 채웁니다.

CREATE TABLE guru100_backup AS SELECT * FROM guru100;

새 테이블 "guru100_backup"은 "guru100" 테이블의 모든 열과 행을 그대로 복사합니다. 특정 행만 복사하려면 SELECT 문에 WHERE 절을 추가하세요.

CREATE TABLE known_ages AS SELECT * FROM guru100 WHERE Age IS NOT NULL;

한 가지 기억해야 할 점은 `CREATE TABLE AS SELECT` 구문은 열 이름, 데이터 유형 및 데이터를 복사하지만 기본 키, 기타 제약 조건 또는 인덱스는 복사하지 않는다는 것입니다. 복사본이 원본과 동일한 규칙을 적용해야 하는 경우 이러한 요소들을 새 테이블에 직접 추가해야 합니다.

SQLite 테이블에 값 삽입

테이블에 값을 삽입하려면 다음과 같이 "INSERT INTO" 문을 사용합니다.

INSERT INTO Tablename(colname1, colname2, ….) VALUES(valu1, value2, ….);

테이블 이름 뒤의 컬럼 이름은 생략하고 다음과 같이 작성하면 됩니다.

INSERT INTO Tablename VALUES(value1, value2, ….);

이런 경우, 테이블에서 열 이름을 생략하는 경우 삽입된 값의 수는 테이블의 열과 정확히 같은 수여야 합니다. 그러면 각 값이 해당 열에 삽입됩니다. 예를 들어, 다음 삽입 명령문의 경우:

INSERT INTO guru100 VALUES(1, 'Mike', 25);

이 문장의 결과는 다음과 같습니다.

SQLite INSERT INTO 문을 사용하여 guru100 테이블에 값 행을 추가합니다.

  • "id" 열에 값 1이 삽입됩니다.
  • 'Mike'라는 값이 "이름" 열에 삽입됩니다.
  • "나이" 열에 25라는 값이 입력됩니다.

INSERT … DEFAULT VALUES 문

다음과 같이 테이블을 열의 기본값으로 한 번에 채울 수 있습니다.

INSERT INTO Tablename DEFAULT VALUES;

특정 열에 null 값이나 기본값이 허용되지 않는 경우, 해당 열에 대해 "NOT NULL 제약 조건 위반" 오류가 발생합니다. 오류 메시지는 다음과 같습니다.

SQLite INSERT DEFAULT VALUES에서 NOT NULL 제약 조건 실패 오류 발생

자주 묻는 질문

그렇지 않습니다. SQLite TRUNCATE TABLE 명령은 없습니다. 테이블을 비우려면 WHERE 절 없이 DELETE FROM table_name 명령을 실행한 다음 VACUUM을 사용하여 해제된 디스크 공간을 회수하십시오. 테이블 구조와 열은 그대로 유지됩니다.

DELETE 문은 테이블에서 행을 제거하지만 테이블, 열 및 구조는 그대로 유지하여 새 데이터를 추가할 수 있도록 합니다. DROP TABLE 문은 테이블 정의, 인덱스 및 트리거를 포함하여 테이블 전체를 삭제하므로 데이터베이스에서 테이블이 더 이상 존재하지 않게 됩니다.

에서 SQLite 명령줄에서 `.tables` 명령어를 사용하면 모든 테이블 이름이 출력됩니다. SQL에서는 내장 스키마 테이블을 쿼리하기 위해 `SELECT name FROM sqlite_master WHERE type = 'table';` 구문을 사용할 수 있으며, 이 쿼리 방식은 데이터베이스에 연결된 모든 애플리케이션에서 작동합니다.

임시 테이블은 `CREATE TEMP TABLE` 또는 `CREATE TEMPORARY TABLE` 명령어를 사용하여 생성됩니다. 이 테이블은 해당 테이블을 생성한 데이터베이스 연결에서만 볼 수 있으며, 해당 연결이 닫히면 자동으로 삭제됩니다. 따라서 중간 쿼리 결과를 저장하는 데 유용합니다.

예. 기본 키는 선택 사항입니다. SQLite하나를 생략하면, SQLite 각 행을 식별하는 숨겨진 64비트 행 ID를 여전히 유지합니다. PRIMARY KEY, UNIQUE, NOT NULL과 같은 열 제약 조건은 테이블을 정의할 때 모두 선택 사항입니다.

기본적으로는 아니오입니다. SQLite 동적 유형을 사용합니다ping 타입 친화성을 사용하면 컬럼은 선언된 타입과 관계없이 거의 모든 타입의 값을 허용합니다. 엄격한 검사를 적용하려면 테이블을 STRICT 테이블로 생성하고, 이를 추가하면 됩니다. SQLite 3.37.

네. AI 텍스트-SQL 도우미는 일반적인 영어 데이터 설명을 열, 데이터 형식 및 키가 포함된 CREATE TABLE 문으로 변환합니다. 기존 스키마를 모델에 제공하면 실제 테이블 및 열 이름을 재사용하므로 정확도가 향상됩니다.

예. GitHub 부조종사 ALTER TABLE, DROP TABLE 등의 명령어를 제안합니다. SQLite 편집기에서 인라인으로 문장을 작성하는 방법 VS Code이 기능은 마이그레이션 파일과 기존 쿼리를 읽어들이므로, 완성된 텍스트는 실제 테이블 및 열 이름과 일치합니다.

이 게시물을 요약하면 다음과 같습니다.