티스토리 뷰
앞서 조회를 먼저 배웠는데, 이번에는 데이터 베이스를 만드는 것이 목표다. 조회하는 것보다 어려운 점은 없으니 걱정말자! 다만 SQL 명령어는 RDBMS 종류에 따라 다르니 꼭 확인하고 사용할 수 있는지 없는지 확인하자.
DDL (Data Definition Language) : 데이터의 기본 구조 및 형식 변경
핵심 SQL 키워드
- CREATE
- DROP
- ALTER
다시 한번 데이터 구성요소를 리마인드 하고 시작하자!
- 전체 Data를 담고 있는 base
- Data를 크게 분류한 Tables
- Table 내부에 작게 분류한 Column(Field)
- Column 별 세부 데이터
CREATE TABLE (테이블 생성)
순서 :
- 데이터 베이스를 연결한다
- 만들 Table 명 설정
- 만들 Column(Field) 명 설정
- 데이터 타입 설정
- 각 데이터들의 제약 조건 설정
DATATYPE(데이터 타입)
- TEXT : 문자열
- INTEGER : 정수
- REAL : 부동 소수점
- BLOB : 이미지, 동영상 등 이진 데이터(바이너리 데이터)
- NULL : 값을 포함하지 않음
CONSTRAINTS(제약조건)
: 테이블 필드에 적용되는 규칙 또는 제한사항을 의미하며 데이터의 무결성을 유지하고 데이터 베이스의 일관성을 보장할 수 있다.
- PRIMARY KEY : 해당 필드를 기본 키(key)로 지정. INTEGER type에만 적용됨
- NOT NULL : 해당 필드에 NULL 값을 허용하지 않도록 지정
- FOREIGN KEY : 다른 테이블과의 외래 키 관계를 정의
AUTOINCREMENT(필드 자동 증가)
: 주로 INTEGER PRIMNARY KEY AUTOINCREMENT을 통해 primary key field에 적용
: 항상 새로운 레코드에 대해 이전 최대 값보다 큰 값을 할당
: 삭제된 값을 무시하고 재활용 하지 않음
위의 예시로 의류 종류인 상의 / 하의 / 신발로 나누어보았고, 그 내부 사항으로는 카테고리, 색깔, 사이즈 등등으로 나누었다. 내부 사항에 해당되는 형태를 명시해주고 값은 반드시 존재해야만 기입이 되게 만들었다.
SQLite에서는 Boolean 값을 허용하지 않기 때문에 Adult(성인용)을 기입할 때는 숫자 0 혹은 1로 기입한다.
모두 실행한 결과를 확인해보자!
ALTER TABLE (테이블 및 필드 조작)
명령어 | 역할 |
ALTER TABLE ADD COLUMN | 컬럼(필드) 추가 |
ALTER TABLE RENAME COLUMN | 컬럼(필드) 이름 변경 |
ALTER TABLE RENAME TO | 테이블 이름 변경 |
ALTER TABLE DROP COLUMN | 컬럼(필드) 삭제 (* 상위 버전 필수) |
조작 방식이 단순하기 때문에 하는 법은 사진으로 대체하겠다. A - > B 하는 수준이니!
◆ Column 추가
다만 테이블을 새로 추가 하는 것이기 때문에 기본값으로 설정한다. 추가할 컬럼만 기입한다면 기본적으로 NOT NULL 제약조건으로 생성되고 내부 DEFAULT 값은 'NULL'로 생성된다.
따라서 DEFAULT 를 통해 어떤 값으로 채워넣을지 정할 수 있다.
또한 여러가지 Column을 한번에 추가할 수 없는 주의사항이 있다.
◆ Column 이름 변경
방금 위에서 작성했던 column 명을 다른 이름으로 바꿔보자! Gender로 바꾸고 싶다면?
영어 A TO B 하는 느낌으로 작성만 해주면 간단하게 바꿔줄 수 있다.
◆ Table 이름 변경
테이블 명을 단수로 작성했던 'top'과 'bottom'을 복수형으로 고쳐보자
동일하게 A TO B 하는 느낌으로!
◆ Table, Column 삭제
Table 삭제는 매우 신중하게 해야한다. 내부 데이터가 전부 다 날아가고 살릴 수도 없다. 그러면서 가장 간단한 문법형태를 띄고 있는데,
실습파일은 사용해야하니.. 예시만 보여주고 넘어가겠다.
column 삭제 같은 경우는 SQLite 버전이 중요하다. .sql 파일에서 select sqlite_version(); 을 작성하면 본인의 splite 버전을 확인할 수 있다.
왜 그런지 열심히 검색해보니 위에 표에서 기입된 것처럼 버전의 문제다. SQLite에서는 3.35 버전 이상부터 업데이트 되어 DROP COLUMN이 가능하다.
업데이트 후 삭제 하면 결과는 !!!
DML (Data Manipulation Language) : 데이터 조작 (추가, 수정, 삭제)
핵심 SQL 키워드
- INSERT
- UPDATE
- DELETE
위에서 DDL을 통해 데이터의 기본 구조를 만들었다면 데이터를 직접 조작해보자.
INSERT (레코드 삽입)
하지만 일일이 다 넣을것인가? 당연히 여러개를 한번에 넣을 수 있다.
UPDATE(레코드 수정)
- UPDATE로 'table'을 설정해준다
- SET를 통해 '변경할 column = 바꿀 값' 을 설정해준다
- 이때 WHERE을 통해 특정값을 골라서 바꾼다 (사용하지않는다면 해당 column 값 모두 변경되니 조심) 단일 데이터를 꺼낼때는 PRIMARY KEY에 해당하는 Id로 특정 가능하다.
DELETE(레코드 삭제)
어딜가나 삭제가 가장 간단하다. 하지만 주의할점은 수정과 동일하다. WHERE을 사용하지 않는다면 모든 레코드가 삭제되는 경험을 할 수 있으니 유의하자.
우리는 WHERE 을 사용할 수 있다는 것은 다른 문법도 사용 가능한지를 확인할 수 있다. SELECT에서 배웠던 방식중에 정렬과 LIMIT(OFFSET) 등을 사용하면 다양한 방식으로 데이터를 처리할 수 있다.
오래된 데이터 4개는 PRIMARY KEY가 AUTOINCREMENT되어있기 때문에 생성순서를 지킬것이다. 그래서 Size column을 정렬하여 낮은 순으로 삭제하면 가능하다.
사실 위에서 큰 실수를 했다. 왜 사이즈별로 삭제했는데 s가 살아있지? 했는데 ORDER BY를 사용할 때 정수 값이 아닌 문자열에 사용했기 때문에 문자열 중에 빠른 ' l ' 부터 상위 4개가 삭제되었다. 데이터를 되돌릴 수 없으니 그냥 무시하자!
JOIN 까지 정리하고 싶었는데, 따로 짧게 정리하는 것이 좋을거 같아 나눠서 작성하려한다. 사실 여태까지가 맛보기였다면 이런 데이터 테이블을 실질적으로 활용할 수 있는 유용한 이유? 를 보여주려한다. 놀랍게도 db에서 하던 것을 django에서 데이터 호출때 사용되면서 심화되니까 잘 쫓아 가보자.
'일상코딩 > 노트' 카테고리의 다른 글
Django : Many to one relationship (0) | 2024.04.05 |
---|---|
DB : SQLite JOIN (0) | 2024.04.04 |
DB : SQLite (DQL) 명령어 (0) | 2024.04.02 |
DB : 데이터베이스 (0) | 2024.04.02 |
Django : Authentication system 2 (0) | 2024.04.01 |
- Total
- Today
- Yesterday
- 연산자
- baby-gin
- views.py
- Python3
- 함수
- Python
- basic syntax
- HTML
- Authentication System
- Sequence types
- Method
- Database
- 카운팅정렬
- 중복순열
- CodeTree
- SQLite
- dfs
- Django
- vue
- 재귀
- Serializer
- vue3
- CRUD
- app
- restapi
- 백준
- JavaScript
- ChatGPT
- SQL
- 순열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |