SQLite 예제를 사용하여 테이블 생성, 변경, 삭제
⚡ 스마트 요약
SQLite 테이블 관리는 세 가지 데이터 정의 명령, 즉 테이블을 정의하는 CREATE TABLE, 테이블 이름을 바꾸거나 열을 추가 및 변경하는 ALTER TABLE, 그리고 데이터베이스에서 테이블을 완전히 제거하는 DROP TABLE에 의존합니다.
아래 섹션에서는 테이블을 생성하고, 구조를 수정하고, 테이블을 삭제하는 방법을 보여줍니다. 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" 명령어를 사용하여 테이블 목록을 표시하면 됩니다. 그러면 테이블 이름이 다음과 같이 변경된 것을 확인할 수 있습니다.
보시는 바와 같이 "alter table" 명령을 실행한 후 테이블 이름 "guru99"가 "guru100"으로 변경되었습니다.
SQLite 열 추가 - ALTER TABLE 명령 사용
또한 "ALTER TABLE" 명령을 사용하여 열을 추가할 수도 있습니다.
ALTER TABLE guru100 ADD COLUMN Age INT;
이렇게 하면 "guru100" 테이블이 수정되어 "Age"라는 새 열이 추가됩니다.
아무런 출력이 표시되지 않으면 명령이 성공적으로 실행되어 열이 추가된 것입니다. 출력이 없다는 것은 커서가 "sqlite>" 뒤에 위치하고 그 뒤에 아무 텍스트도 표시되지 않는다는 의미입니다. 예를 들어 다음과 같습니다.
하지만 열이 추가되었는지 확인하려면 ".schema guru100" 명령어를 사용할 수 있습니다. 이 명령어를 실행하면 테이블 정의가 표시되고, 방금 추가한 새 열이 보일 것입니다.
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);
이 문장의 결과는 다음과 같습니다.
- "id" 열에 값 1이 삽입됩니다.
- 'Mike'라는 값이 "이름" 열에 삽입됩니다.
- "나이" 열에 25라는 값이 입력됩니다.
INSERT … DEFAULT VALUES 문
다음과 같이 테이블을 열의 기본값으로 한 번에 채울 수 있습니다.
INSERT INTO Tablename DEFAULT VALUES;
특정 열에 null 값이나 기본값이 허용되지 않는 경우, 해당 열에 대해 "NOT NULL 제약 조건 위반" 오류가 발생합니다. 오류 메시지는 다음과 같습니다.






