update — subquery 가능
set — subquery 가능
where — subquery 가능
오라클
update emp
set sal = 9560
where ename='SCOTT';
select ename, sal from emp;
MySQL
오라클과 다르게 자동커밋됨
set SQL_SAFE_UPDATES=0;
set SQL_SAFE_UPDATES=0;
update emp
set sal = 9560
where ename='SCOTT';
select ename, sal from emp;
Edit - Preferences... - SQL Execution
💡 mySQL에서 자동 커밋 기능을 비활성화하는 작업을 확인하는게 아주 중요
update emp
set comm = 7000
where job='ANALYST';
edit - Preferences... -
다시 workbench 를 껐다가 켭니다
update emp
set comm = 9000
where sal > ( select sal
from emp
where ename='SMITH');
update emp
set sal = 9500
where hiredate > ( select hiredate
from emp
where ename='ALLEN');
💡 MYSQL에서는 안됨
update emp
set comm= ( select comm
from emp
where ename='MARTIN')
where ename='SCOTT';
💡 MYSQL에서는 안됨
update emp
set job = (select job
from emp
where ename='MARTIN')
where ename='KING';
cmd에서 @demo 한번 돌리기
💡
update 서브쿼리 가능
set 서브쿼리 가능
where 서브쿼리 가능
select e.ename, d.loc
from emp e, dept d
where e.deptno = d.deptno;
alter table emp
add loc varchar2(20);
select ename, loc
from emp;
update ( select e.loc as emp_loc, d.loc as dept_loc
from emp e, dept d
where e.deptno = d.deptno )
set emp_loc = dept_loc;
ㄴ merge만큼 속도 빠름
💡 alter문은 DDL명령어라서 자동커밋이 됨
alter table emp21
drop column t_price;
-- alter 문은 ddl 명령어이기 때문에 자동 커밋이 됨
select * from emp21;
alter table emp21
add t_price number(10);
select * from emp21;
update ( select e.t_price as e_t_price, t.t_price as t_t_price
from emp21 e, telecom_table t
where e.telecom = t.telecom )
set e_t_price = t_t_price;
select ename, t_price from emp21;
💡 위의 update문은 튜닝 후 SQL임