데이터베이스 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;