Spring

국비코딩 Mar20 | db 기초 정리, 테이블 생성, 수정, dml

onnnzeoz 2023. 3. 20. 15:40

root계정: 관리자 계정, 함부로 쓰면 안됨

dcl : user생성, 권한주고 data controll language

ddl

dml : 데이터를 다루는 언어 ex select, insert, update, delete, upsert

web

 

테이블수정은 초창기에 다해야함, 

mydb라는 데이터베이스 안으로 들어가서 테이블을 생성해줄것

 

테이블 생성하는법

create table[테이블 명](

[컬럼 명][데이터타입](사이즈),

...

[컬럼 명][데이터타입](사이즈)

);

 

데이터 타입 종류

1, 문자타입

고정형 : char(바이트 수) // 무조건 고정되어있는 것만 이거 씀 ex 주민번호?

가변형 : varchar(바이트 수) //고정형보단 느리지만 너무 편함, 500~1000~정도면 이거 씀

text : 65535바이트까지 들어감

longtext : 4294967295바이트 ㅋㅋㅋ

보통 varchar로 해결

 

2.숫자타입

int, bigint, float(전체자리, 그 중 소수점 자리), double

ex int(3) : 3자리 수까지

float(4,2) : 4자리 중에 2자리만 소수점 -> 34.89

3.boolean타입

 

4. 날짜타입

date (0000-00-00

datetime ( 0000-00-00 00:00:00

timestamp (datetime과 같지만 서버의 위치에 따라 시간이 변경된다.

reg_date date default current_date //현재 날짜를 기본으로 집어 넣으라는 

 

테이블 삭제

drop table [테이블 이름]

 

테이블 내 데이터를 모두 삭제 (데이터 자체를 삭제-> 재생성

데이터 다 날아가는거

truncate table [테이블 명]

 

테이블 수정

컬럼명 변경(기존 데이터가 삭제되니 주의해야함, alter로 바꾸면 데이터 복구 안됨, 오타나도 걍 )

alter table [table name] rename column [ origin name ] to [ new name ]

 

컬럼 추가

alter table [ table name ] add ([ column name ] [ data type ] ( size ));

차라리 컬럼 추가를 하고 한참보다가 원래꺼 지우는식으로

 

컬럼 속성 변경 (컬럼이 비어있어야 한다, 데이터타입이랑 size만 바꿀 수 있음 이름은 못바꿔여기서)

alter table [ table name ] modify column [ column name ] [ data type ] (size)

 

컬럼 삭제

alter table [ table name ] drop column [ column name ]

 

dml

1. 데이터 삽입 insert

 

2. 데이터 수정 update

update [ table name ] set [ column ] = [ name ] where [ condition ]

 

3. 데이터 삭제(DELETE)

-- DELETE FROM [테이블명] WHERE [조건]

delete from employees where first_name is null;

select * from employees;

-- 4. 값이 없으면 INSERT, 있으면 UPDATE 하기

-- UPSERT 라고 부른다.(명령어 아님)

-- 다만 제약조건이 있어야 하므로 제약조건 이후에 다시 다룰 예정

 

데이터 조회

특정 컬럼 조회하기

-- select [column] from [table];

select * from employees;

select first_name, family_name, salary from employees;

 

특정 조건 만족하는 데이터 조회

-- select [column] from [table] where [ condition ];

select * from employees where family_name = '김' or salary >= 2000000;

 

중복 제거(팀이 몇 팀이나 있지?)

-- select distinct [중복제거 컬럼,...] from [ table ]

-- 메뉴얼상에는 1개이상 가능하다고 하지만 1개이상 넣지 않는게 좋다

-- 중복제거는 1개 컬럼을 대상으로 하는 것이 가장 정확하다.

select distinct family_name, salary from employees;

 

in

컬럼이 같은 여러 값에 or조건을 사용할 때 중복제거해줘서 간략하게+속도 빠름

-- family_name이 '김'이거나 '박'이거나 '이'인 사람의 모든 컬럼을 가져와라

select * from employees where family_name ='김' or family_name ='박' or family_name ='이';

select * from employees where family_name in ('김','이','박');

 

is null / is not null

select * from employees where commission_no is not null;

select * from employees where commission_no is null;

 

like 검색

-- 일부가 비슷한 내용을 검색하는 것(속도가 느 림 ㅋ)

-- where [column name] like '%[문자열]%'

-- ze% -> ze로 시작하는

-- %com -> com으로 끝나는

-- %se% -> se를 포함하는 (가장 많이 씀)

-- %s%e% -> s또는 e를 포함하는

 

order by

-- 특정 컬럼을 기준으로 정렬 asc (오름차순) | desc (내림차순)

-- order by의 위치는 맨 뒤, 데이터를 뽑고나서! 정렬 하는 것이 훨씬 편함.

-- salary가 많은 순으로...정렬

select * from employees order by salary desc;

-- family_name을 가나다 순으로...

select * from employees order by family_name asc;

 

group by

-- 데이터를 특정한 컬럼을 중심으로 묶어서 가져오는 것

-- select [컬럼, 컬럼....] from [table] group by [묶어줄 기준 컬럼]

 

Transaction

쪼갤 수 없는 업무처리 단위(내가 돈을 보내고 너가 받음, 이건 일이 두개가 됏지만 이건 쪼갤 수 없는 일의 단위지ㄴㅐ가 보내기만 하고 너가 안받으면 큰일이니까)

 

-- 1) commit : (데이터를 변경한) 실행한 쿼리를 확정한다 (maria에선 자동commit시켜서 되돌리기가 힘듦)

select @@AUTOCOMMIT; -- 1로 뜨면 오토커밋 켜져있다는 뜻

set autocommit = 0;

-- autocommit 기능 off, 이렇게 하면 끌 수 있음, 근데 db껐다 켜면 다시 원상복귀, insert,update같은거 할때 꼭 꺼야함

-- 이걸 꺼도 create, alter, drop, truncate는 취소가 안된다

-- 2) roll back : (데이터를 변경한) 실행한 쿼리를 취소한다

commit; -- 실행한 쿼리를 확정짓는거

select * from employees;

-- emp_no 117~130까지 삭제

delete from employees where emp_no between 117 and 130;

rollback; -- 지난 쿼리 되돌리기

-- 신규작업 (insert, update, delete)이 확정되면 반드시 commit을 해줄 것!!!!!!!!!

 

 

생활의 지혜

오토커밋은 끄고 시작, 그리고 확실해졌다 !! 하면 무조건 commit해주고 오기 !!!