데이터베이스 DB/MySQL

[MySQL/2일차] DDL, DML(select 제외)

하나비 HANABI 2023. 1. 25. 16:03

CREATE

테이블 생성

create table emp_ddl (
	empno int,
    ename varchar(10),
    job varchar(10),
    mgr int,
    hiredate datetime,
    sal double,
    comm double,
    deptno int
);

 

만든 테이블 확인

desc emp_ddl;

테이블 복사하여 생성

-- dept 테이블을 복사하여 dept_temp 테이블 생성 --
create table dept_temp
as select * from dept;

테이블의 구조만 복사

-- 테이블의 구조를 복사하여 새 테이블 만들기
-- 데이터는 복사 안됨
CREATE TABLE emp_temp
as select * from emp where 1<>1;

insert into emp_temp
values(1111,'코난','PRESIDENT',NULL,'2021/01/01',5000,1000,10);

insert into emp_temp
values(2222,'장미','MANAGER',9999,'2020-12-01',4000,2000,20);

insert into emp_temp
values(3333,'미란','ANALYST',5555,STR_TO_DATE('2018-08-08','%Y-%m-%d'),4000,2000,20);

-- 시스템의 날짜정보 입력 --
insert into emp_temp
values(5555,'키드','MANAGER',1111,sysdate(),1200,1200,30);

 

 

INSERT

데이터 삽입

insert into 테이블명 (컬럼, 컬럼 ...) values (값, 값 ...)

insert into dept_temp
(deptno, dname, loc)
values(50, 'DATABASE', 'SEOUL');
-- 모든 컬럼에 데이터를 넣을 땐 (컬럼명..) 생략 가능 
insert into dept_temp
values(60, 'JAVA', 'BUSAN');

-- NULL 삽입 가능
insert into dept_temp
values(70, 'WEB', NULL);

insert into dept_temp
(deptno, loc)
values(80, 'INCHEON');

emp 테이블에서 월급이 1등급인 사원의 정보를 emp_temp 테이블에 삽입

-- 다른 테이블에서 월급이 1등급인 사람들의 정보만 뽑아와 입력
insert into emp_temp
(empno, ename, job, mgr, hiredate, sal, comm, deptno)
select e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno
from emp e, salgrade s
where e.sal between s.losal and s.hisal
and s.grade = 1;

 

UPDATE

테이블에 저장된 데이터를 수정

update 테이블 명 set 열=데이터, 열=데이터 where 수정할 행을 선별할 조건식

 

수정이 되지 않는다면 

set autocommit = 0;

mysql은 dml도 커밋되도록 설정이 되어있으므로 위와 같이 자동 커밋을 꺼주어야 한다.

-- 모든 행의 loc 값을 SEOUL로 변경
update dept_temp2
set loc='SEOUL';

-- 수정한 내용을 되돌리기
ROLLBACK;

-- 일부만 수정
update dept_temp2
set
dname = 'DATABASE', loc='LA'
where deptno=40;

 

서브쿼리 활용하여 데이터 수정

-- dept 테이블의 정보대로 dept_temp 테이블에 반영
update dept_temp2
set dname = (select dname from dept where deptno=40),
	loc = (select loc from dept where deptno=40)
where deptno = 40;

-- where절에서 서브쿼리 사용 (별칭이 필수)
-- 부서명이 operations인 경우의 부서 위치를 서울로 바꾸기
update dept_temp2
set loc='SEOUL'
where deptno in (select tbl_deptno
	from (select deptno tbl_deptno from dept_temp2 where dname='OPERATIONS') temp);

 

DELETE

데이터 삭제

delete from 테이블명 where 삭제할 대상 행 선별을 위한 조건식

delete from emp_temp2
where job='MANAGER';
-- 30번 부서에서 급여가 3등급인 직원삭제
delete from emp_temp2
where empno in (select tbl_empno
				from (select e.empno tbl_empno 
						from emp_temp2 e, salgrade s 
                        where e.sal between s.losal and s.hisal 
                        and s.grade = 3 
                        and deptno=30) 
                        temp);

 

ALTER

객체를 변경할 때 사용 (but, 차라리 테이블을 삭제하고 새로 만드는게 더 빠르다)

 

add - 테이블에 열을 추가

-- hp라는 이름의 열 추가
alter table emp_alter
add hp varchar(20);

rename - 열의 이름을 변경

alter table emp_alter
rename column hp to tel;

modify - 열의 자료형 변경

alter table emp_alter
modify empno char(5);

drop - 특정 열을 삭제

alter table emp_alter
drop column tel;

 

RENAME

테이블의 이름을 변경

rename table emp_alter to emp_rename;

 

TRUNCATE

모든 데이터 삭제. DDL이므로 롤백이 불가함.

truncate table emp_rename;