국비코딩 Mar20 | db 기초 정리, 테이블 생성, 수정, dml
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해주고 오기 !!!