SQL - DB 생성, 테이블 생성, 기초 문법
해당 블로그는 MySQL을 사용하여 작성된 블로그입니다. 먼저 MySQL은 --과 #을 주석으로 사용한다는 점과 실행하는 코드를 ;로 구분한다는 점을 알아야 합니다. 또한 Oracle과 달리 문자형을 입력할 때 ''만 가능합니다. ""을 넣을 경우 에러가 발생합니다.
1. DB(데이터베이스) 생성
DBMS의 큰 개념인 데이터베이스를 만들고 그 안에 데이터를 저장해줍니다.
1.1. 데이터 베이스 확인
현재 데이터베이스 목록을 보여줍니다.
show databases;
1.2. 데이터베이스 만들기
create database 데이터베이스명;
이때 중복된 이름의 데이터베이스는 만들어 지지 않습니다. 이 다음으로 만들 테이블은 데이터베이스의 하나의 객체라고 보면 됩니다. 때문에 데이터베이스는 table, view 등을 저장할 수 있게 미리 공간을 저장해둡니다.
2. 스키마
스키마는 데이터베이스의 설계와 구성을 결정하는 일종의 도면 또는 계획입니다. 데이터베이스의 구조와 제약조건에 관한 명세를 기술한 집합입니다.
스키마의 특징
- 데이터 구조 정의: 스키마는 데이터베이스 내의 테이블, 열, 제약 조건 등을 어떻게 정의할지를 결정합니다.
- 데이터 구조 조직화: 데이터베이스 내의 여러 개체를 분리하고 정리하는 데 사용됩니다.
- 접근 제어: 스키마는 데이터베이스 사용자에게 어떤 데이터에 접근할 권한을 부여할지를 관리합니다.
3. 제약조건
제약조건(constraint)은 데이터의 무결성을 지키기 위해 데이터를 입력 받을때 실행되는 최소한의 검사 규칙입니다.
- not null : null 값 XX, 중복값은 허용
- unique : 중복값을 허용하지 않음, null 값을 허용
- primary key : null 값 허용하지 않음, 중복값 허용하지 않음, 인덱싱이 됨(검색속도빠름),테이블당 단 하나만 가능,foreign key(참조키)와 쌍으로 연결됨
- foreign key(참조키, 외부키) : primary key를 가진 테이블과 연결하는 역할
- default : null값이 들어올때 기본이 되는 값을 설정함
- enum : 원하는 범위를 설정하고 해당 범위의 값만 저장 # 권장하지 않음
4. 데이터 타입
데이터 타입은 테이블을 생설할때 반드시 들어가줘야합니다. 종류가 매우 다양해 어렵고 귀찮게 느껴지지만 자주쓰는 데이터 타입 몇개만 알고있으면 됩니다.
4.1. 숫자형 타입
- tinyiny : 정수(1byte), [-128,127]범위 내의 데이터만 들어갈 수 있음 갯수가아니라 값의 범위
- smallunt : 정수(2byte), [-32768,32767]범위 내의 데이터 값만 들어갈 수 있음 갯수가 아니라 값의 범위
- int : 정수(4byte), 약 -21억 ~ 약 21억 - 추천
- bigint : 정수(8byte), 거의 무제한 - 추천
- float : 부동 소수형 데이터 타입(4byte)
- double : 부동 소수형 데이터 타입(8byte) - 추천(메모리더쓰는대신속도빠름)
- decimal(길이,소수) : 길이와 소수점 설정 가능, float와 double과 다르게 무조건 설정한 소수점자리까지 보여줌
- alter : 고정 소수형 데이터 타입
4.2. 문자형 타입
- char: 고정길이 데이터 타입 (최대 255byte),지정된 길이보다 짧은 데이터 타입 입력하면 나머지 공간 채움
- varchar: 가변길이 데이터 타입 (최대 65535byte), 지정된 길이보다 짧아도 나머지 공간 채우지 XX
- text: 문자열 데이터 타입(최대 65535byte), varchar가 귀찮을때 씀, 예전에 varchar가 바이트수가 적을때 썼었음
- longtext: 무제한 문자열 데이터 타입
4.3.이진 데이터 타입
- binary , byte : char형태의 이진 데이터 타입(최대 255byte) - 글자로 표현하지 못하는 데이터타입(소리,이미지 등)
- varbinary : varchar 형태의 이진 데이터 타입(최대 65535byte)
4.4. 날짜 데이터 타입
- date : 날짜(YY,MM,DD) 형태의 데이터 타입(3byte)
- time : 시간(HH,MM,SS) 향태의 데이터 타입(3byte)
- datetime : 날짜와 시간 형태의 데이터 타입(8byte)
- timestamp : 1970년 1월 1일 0시 0분 0초부터 시작한 ms타입의 시간이 저장(4byte)
5. SQL 문법 - 조회 수정 삭제
- select : 데이터 조회 명령어
- update : 데이터 수정 명령어
- delete : 데이터 삭제 명령어
- insert : 데이터 삽입 명령어
- create : 객체(형태를 갖는 대상) 생성
- alter : 객체 변경
- drop : 객체 삭제
- truncate : 테이블 데이터 전체 삭제
기본적인 SQL문에 대해 알아보기전 가장 기본적인 문법 8가지입니다. 더 자세히 분류하자면 DDL, DML 등으로 분류가 가능한데 이는 SQLD관련 포스팅을 하게되면 작성하겠습니다. 이중 TRUNCATE는 테이블을 완전히 삭제하는 명령어로 빠르다는 장점이 있지만 복구할 수 없다는 치명적인 단점이 있습니다. 때문에 속도는 조금 더 걸려도 복구할 수 있는 DELETE를 사용하시길 바랍니다.
6. 테이블(table)
테이블은 데이터를 행(레코드,로우)과 열(컬럼,필드)로 스키마에 따라 저장할 수 있는 구조입니다.
6.1. 테이블 확인
desc는 describe의 약자로 존재하는 테이블 목록을 출력합니다.
desc member;
6.2. 데이터베이스 선택
우선 테이블을 만들 데이터베이스 위치를 설정해줍니다.
use 데이터베이스명;
6.3. 테이블 생성
설정한 데이터베이스에 테이블을 생성합니다.
create table 테이블명 ( 필드명1 데이터타입 제약조건, 필드명2 데이터타입 제약조건, 필드명3 데이터타입 제약조건, ... 필드명n 데이터타입 제약조건 )
6.4.테이블 삭제하기
drop table 테이블명
6.5.필드 추가하기
alter table 테이블명 add 컬럼명 데이터타입 제약조건
6.6.필드 수정하기
alter table 테이블명 modify column 컬럼명 데이터타입 제약조건
6.7.필드 삭제하기
alter table 테이블명 drop 컬럼명;
7. 테이블 속 데이터 관리
7.1. 데이터 삽입하기
# 모든 필드값 입력 insert into 테이블명 values (값1, 값2, 값3, ...) # 일부 필드값만 입력 insert into 테이블명(필드명1,필드명2,...) values(값1,값2,값3,...)
7.2. 데이터 수정
# 필드명에 값을 대입하면 해당필드 전부가 값으로 바뀜 update 테이블명 set 필드명1 = 값1, 필드명2 = 값2,... ; # where 조건절로 원하는 행만 값 변경 update 테이블명 set 필드명1 = 값1, 필드명2 = 값2,... where 조건절;
7.3.데이터 삭제하기
delete from 테이블명; delete from 테이블명 where 조건절;