본문 바로가기

hadoop

8. mySQL 설치, 설명

728x90
반응형

8. mySQL

-> centos 에서 수행

 

ip  102

 

root

oracle880401

 

 

https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-centos-7

이거보면서 mySQL 설치

 

root 계정 접속한 사람은 sudo 빼고 코드 복붙

 

임시비번 :

=E5;VTrYWPh(

 

새비번:

쓰더

 

mysql -u root -p   (접속하는 ! )

 

 

접속 안된 사람, 접속 성공한 사람들도

https://dev.mysql.com/downloads/file/?id=480542

링크 타고 들어가서

Windows (x86, 64 비트), MSI 설치 프로그램

저장해두시오

 

 

 

mysql> status

--------------

mysql  Ver 14.14 Distrib 5.7.24, for Linux (x86_64) using  EditLine wrapper

 

Connection id:          15

Current database:

Current user:           root@localhost

SSL:                    Not in use

Current pager:          stdout

Using outfile:          ''

Using delimiter:        ;

Server version:         5.7.24 MySQL Community Server (GPL)

Protocol version:       10

Connection:             Localhost via UNIX socket

Server characterset:    latin1

Db     characterset:    latin1

Client characterset:    utf8

Conn.  characterset:    utf8

UNIX socket:            /var/lib/mysql/mysql.sock

Uptime:                 28 min 33 sec

 

Threads: 1  Questions: 15  Slow queries: 0  Opens: 107  Flush tables: 1  Open tables: 100  Queries per second avg: 0.008

 

 

 

mysql> select version()

    -> ;

+-----------+

| version() |

+-----------+

| 5.7.24    |

+-----------+

1 row in set (0.00 sec)

 

 

 

mysql> create database orcl;

Query OK, 1 row affected (0.03 sec)

 

mysql> use orcl;

Database changed

 



 

emp 테이블 만들기

 

drop table emp;

drop table dept;

 

CREATE TABLE dept

(deptNO int,

DNAME VARCHAR(14),

LOC VARCHAR(13) );

 

INSERT INTO dept VALUES (10, 'ACCOUNTING', 'NEW YORK');

INSERT INTO dept VALUES (20, 'RESEARCH', 'DALLAS');

INSERT INTO dept VALUES (30, 'SALES', 'CHICAGO');

INSERT INTO dept VALUES (40, 'OPERATIONS', 'BOSTON');

 

CREATE TABLE emp (

empNO int NOT NULL,

ENAME VARCHAR(10),

JOB VARCHAR(9),

MGR int,

HIREDATE DATE,

SAL int,

COMM int,

deptNO int );

 

INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,'81-11-17',5000,NULL,10);

INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,'81-05-01',2850,NULL,30);

INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,'81-05-09',2450,NULL,10);

INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,'81-04-01',2975,NULL,20);

INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,'81-09-10',1250,1400,30);

INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,'81-02-11',1600,300,30);

INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,'81-08-21',1500,0,30);

INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,'81-12-11',950,NULL,30);

INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,'81-02-23',1250,500,30);

INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,'81-12-11',3000,NULL,20);

INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,'80-12-09',800,NULL,20);

INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,'82-12-22',3000,NULL,20);

INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,'83-01-15',1100,NULL,20);

INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,'82-01-11',1300,NULL,10);

 

commit;

 

 

mysql> select * from emp;

 

+-------+--------+-----------+------+------------+------+------+--------+

| empNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL  | COMM | deptNO |

+-------+--------+-----------+------+------------+------+------+--------+

|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL |     10 |

|  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850 | NULL |     30 |

|  7782 | CLARK  | MANAGER   | 7839 | 1981-05-09 | 2450 | NULL |     10 |

|  7566 | JONES  | MANAGER   | 7839 | 1981-04-01 | 2975 | NULL |     20 |

|  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-10 | 1250 | 1400 |     30 |

|  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-11 | 1600 |  300 |     30 |

|  7844 | TURNER | SALESMAN  | 7698 | 1981-08-21 | 1500 |    0 |     30 |

|  7900 | JAMES  | CLERK     | 7698 | 1981-12-11 |  950 | NULL |     30 |

|  7521 | WARD   | SALESMAN  | 7698 | 1981-02-23 | 1250 |  500 |     30 |

|  7902 | FORD   | ANALYST   | 7566 | 1981-12-11 | 3000 | NULL |     20 |

|  7369 | SMITH  | CLERK     | 7902 | 1980-12-09 |  800 | NULL |     20 |

|  7788 | SCOTT  | ANALYST   | 7566 | 1982-12-22 | 3000 | NULL |     20 |

|  7876 | ADAMS  | CLERK     | 7788 | 1983-01-15 | 1100 | NULL |     20 |

|  7934 | MILLER | CLERK     | 7782 | 1982-01-11 | 1300 | NULL |     10 |

+-------+--------+-----------+------+------------+------+------+--------+

14 rows in set (0.00 sec)

 

 

오라클 mysql 인수하면서 비교적 저렴하게 mysql 내놨다.

 

 

정리

NoSQL: 1. hive

   2. Tajo

   3. pig

   4. mongodb

 

RDBMS: 1. Oracle

    2. MySQL

 

 

 

오라클            vs                             mySQL

 

     nvl                                                     ifnull

 

 

   sysdate                                          sysdate()

 

 

round(sysdate-hiredate)                       to_days()

 

months_between                             period_diff

 

add_months                                    period_add

 

last_day                                           last_day

 

 to_char                           format, date_format

                                    문자화  지정날짜값으로

   to_days (날짜화, )

 

decode                                   if (컬럼명=조건,조건,조건)

 

 

case                                   case

 

rollup                                         with rollup

 

rank                                   지원안함

 

listagg                                   group_concat

 

 | (string)                           concat

 

 

 

문제120.

직업이 SALESMAN 사원들의 이름,월급,직업을 출력하는데

월급이 높은 사원부터 출력하시오 !

 

select ename, sal, job

from emp

where job='SALESMAN'

order by sal desc;

 

+--------+------+----------+

| ename  | sal  | job      |

+--------+------+----------+

| ALLEN  | 1600 | SALESMAN |

| TURNER | 1500 | SALESMAN |

| MARTIN | 1250 | SALESMAN |

| WARD   | 1250 | SALESMAN |

+--------+------+----------+

 

오라클과 다른점 :

SALESMAN 소문자로 써도 된다 !!

 

 

 

문제121.

이름,커미션을 출력하는데 커미션 null 사원들은 0 으로 출력하시오

select ename, ifnull(comm,0)

from emp;

 

 

 

문제122.

오늘 날짜를 출력하시오 !

select sysdate()

from dual;

 

+---------------------+

| sysdate()           |

+---------------------+

| 2019-01-03 16:50:40 |

+---------------------+

 

 

 

문제123.

이름,입사한 날짜부터 오늘까지 근무했는지 출력하시오

select ename, to_days(sysdate())-to_days(hiredate)

from emp;

**각각에 to_days() 시켜줘야

 

 

 

문제124. 이름,입사한 날짜부터 오늘까지 근무했는지 출력하시오

 

select ename, period_diff(date_format ( now(), '%Y%m'),

  date_format(hiredate, '%Y%m') ) as months

from emp;

+--------+-------+

| ename  | month |

+--------+-------+

| KING   |   446 |

| BLAKE  |   452 |

| CLARK  |   452 |

| JONES  |   453 |

| MARTIN |   448 |

| ALLEN  |   455 |

| TURNER |   449 |

| JAMES  |   445 |

| WARD   |   455 |

| FORD   |   445 |

| SMITH  |   457 |

| SCOTT  |   433 |

| ADAMS  |   432 |

| MILLER |   444 |

 

 

 

문제125. 오늘부터 100 뒤에 돌아오는 날짜가 어떻게 되는가?

SQL> select add_months(sysdate,100)

from dual;

 

mySQL>select period_add(date_format(sysdate(), '%Y%m' ), 100)

   from dual;  <<<-- 이거 오답

 

mySQL> select substring(aa,1,4) as year,

     substring(aa,5,2) as month

from (

select period_add(date_format(sysdate(), '%Y%m'),100) aa

from dual

 ) aaa;

 

+------+-------+

| year | month |

+------+-------+

| 2027 | 05    |

+------+-------+

 

 

 

 

문제126.

이번달의 마지막 날짜가 어떻게 되는가?

SQL>select last_day(sysdate)

from dual;

mySQL>select last_day(sysdate() )

from dual;

 

+----------------------+

| last_day(sysdate() ) |

+----------------------+

| 2019-01-31           |

+----------------------+

 

 

 

문제127. (오늘의 마지막 문제)

오늘부터 이번달 말일까지 몇일 남았는지 출력하시오

select  to_days(last_day(sysdate()) )-to_days(sysdate())

from dual;

 

+--------------------------------------------------+

| to_days(last_day(sysdate()) )-to_days(sysdate()) |

+--------------------------------------------------+

|                                               28 |

+--------------------------------------------------+

 

 

 

문제128. 오늘이 무슨 요일인지 출력하시오

SQL> select to_char(sysdate,'day')

from dual;

 

mysql>select date_format(sysdate(), '%W')

from dual;

 

+------------------------------+

| date_format(sysdate(), '%W') |

+------------------------------+

| Friday                       |

+------------------------------+

 

 

 

 

문제129. 이름,입사일,입사한 요일을 출력하시오

SQL> select ename, hiredate, to_char(hiredate, 'day')

from emp;

 

mysql>select ename, hiredate, date_format(hiredate, '%W' )

from emp;

+--------+------------+------------------------------+

| ename  | hiredate   | date_format(hiredate, '%W' ) |

+--------+------------+------------------------------+

| KING   | 1981-11-17 | Tuesday                      |

| BLAKE  | 1981-05-01 | Friday                       |

| CLARK  | 1981-05-09 | Saturday                     |

| JONES  | 1981-04-01 | Wednesday                    |

| MARTIN | 1981-09-10 | Thursday                     |

| ALLEN  | 1981-02-11 | Wednesday                    |

| TURNER | 1981-08-21 | Friday                       |

| JAMES  | 1981-12-11 | Friday                       |

| WARD   | 1981-02-23 | Monday                       |

| FORD   | 1981-12-11 | Friday                       |

| SMITH  | 1980-12-09 | Tuesday                      |

| SCOTT  | 1982-12-22 | Wednesday                    |

| ADAMS  | 1983-01-15 | Saturday                     |

| MILLER | 1982-01-11 | Monday                       |

+--------+------------+------------------------------+

 

 

 

 

 

문제130. 이름,월급을 출력하는데 월급을 출력할 때에 천단위를 붙이시오

SQL> select ename, to_char(sal,'999,999')

from emp;

 

mysql> select ename, format(sal,0)

from emp;

+--------+---------------+

| ename  | format(sal,0) |

+--------+---------------+

| KING   | 5,000         |

| BLAKE  | 2,850         |

| CLARK  | 2,450         |

| JONES  | 2,975         |

| MARTIN | 1,250         |

| ALLEN  | 1,600         |

| TURNER | 1,500         |

| JAMES  | 950           |

| WARD   | 1,250         |

| FORD   | 3,000         |

| SMITH  | 800           |

| SCOTT  | 3,000         |

| ADAMS  | 1,100         |

| MILLER | 1,300         |

+--------+---------------+

 

 

 

문제131.

이름,직업,보너스를 출력하는데 직업이 SALESMAN 이면 보너스를 6000 출력하고

아니면 0 출력하시오

SQL> select ename, job,

decode(job,'SALESMAN',6000,0) as bonus

from emp;

 

mysql>select ename, job,

  if ( job='salesman',6000,0) as bonus

from emp;

 

+--------+-----------+-------+

| ename  | job       | bonus |

+--------+-----------+-------+

| KING   | PRESIDENT |     0 |

| BLAKE  | MANAGER   |     0 |

| CLARK  | MANAGER   |     0 |

| JONES  | MANAGER   |     0 |

| MARTIN | SALESMAN  |  6000 |

| ALLEN  | SALESMAN  |  6000 |

| TURNER | SALESMAN  |  6000 |

| JAMES  | CLERK     |     0 |

| WARD   | SALESMAN  |  6000 |

| FORD   | ANALYST   |     0 |

| SMITH  | CLERK     |     0 |

| SCOTT  | ANALYST   |     0 |

| ADAMS  | CLERK     |     0 |

| MILLER | CLERK     |     0 |

+--------+-----------+-------+

 

 

문제132.

이름,직업,보너스를 출력하는데 직업이 SALESMAN 이면 보너스를 6000 출력하고

직업이 ANALYST 3000 출력하고

나머지는 0 출력하시오

SQL> select ename, job,

decode(job,'SALESMAN',6000,0) as SALES_bonus,

decode(job,'ANALYST',3000,0)as ANALYST_bonus

from emp;

 

mysql>select ename, job,

if (job='SALESMAN',6000,0) as bonus1,

if ( job='ANALYST',3000,0) as bonus2

from emp;

같은 컬럼에 넣으려면

select ename, job,

       if(job='salesman', 6000,

          if(job='analyst', 3000, 0)) as bonus

from emp;

 

 

 

문제133.

이름,부서번호,보너스를 출력하는데

부서번호가 10번이면 보너스를 7000

부서번호가 20번이면 보너스를 9000

부서번호가 30번이면 보너스를 4000으로

출력하시오

SQL> select ename, deptno,

case  deptno when 10 then 7000

when 20 then 9000

when 30 then 4000

else 0 end as bonus

from emp;

 

mysql>select ename,deptno,

case deptno when 10 then 7000

when 20 then 9000

when 30 then 4000

else 0 end as bonus

from emp;

 

+--------+--------+-------+

| ename  | deptno | bonus |

+--------+--------+-------+

| KING   |     10 |  7000 |

| BLAKE  |     30 |  4000 |

| CLARK  |     10 |  7000 |

| JONES  |     20 |  9000 |

| MARTIN |     30 |  4000 |

| ALLEN  |     30 |  4000 |

| TURNER |     30 |  4000 |

| JAMES  |     30 |  4000 |

| WARD   |     30 |  4000 |

| FORD   |     20 |  9000 |

| SMITH  |     20 |  9000 |

| SCOTT  |     20 |  9000 |

| ADAMS  |     20 |  9000 |

| MILLER |     10 |  7000 |

+--------+--------+-------+

 

 

문제134. 이름,월급,보너스를 출력하는데

월급이 2000 이상이면 보너스를 900 출력하고

1000 이상이면 보너스를 800 출력하고

나머지는 0 출력하시오

 

SQL> select ename,sal,

case  when sal>=2000 then 900

   when sal>=1000 then 800   # 2000>sal>=1000 으로 하면 안나옴

  else 0 end as bonus

from emp;

 

 

문제135. 아래와 같이 결과를 출력하시오

SQL> select sum(decode(deptno,10,sal,null) ) as "10",

sum(decode(deptno,20,sal,null)) as "20",

sum(decode(deptno,30,sal,null)) as "30"

from emp;

 

mysql>select

sum(if (deptno=10, sal, null ) ) as "10",  #sum으로 묶어서 그룹처리 가능

sum(if (deptno=20, sal, null ) ) as "20",

sum(if (deptno=30, sal, null ) ) as "30"

from emp;

 

mysql>select

case deptno when 10 then sum(sal)   #에러뜸. group 없이 sum 안된다함

when 20 then sum(sal)

when 30 then sum(sal)

else 0 end as "bonus"

from emp;

 

 

 

 

문제136.

아래의 SQL Mysql 구현하시오!

SQL> select deptno, sum(sal)

from emp

group by rollup(deptno);

 

mysql> select deptno, sum(sal)

from emp

group by deptno with rollup;

+--------+----------+

| deptno | sum(sal) |

+--------+----------+

|     10 |     8750 |

|     20 |    10875 |

|     30 |     9400 |

|   NULL |    29025 |

+--------+----------+

 

오라클과 달리 mysql with rollup 지원하나

 cube 지원하지 않는다.

 

 

문제137.

아래의 SQL mySQL 구현하시오

SQL> select deptno, sum(sal)

from emp

group by cube(deptno);

 

mysql>select null, sum(sal)

from emp

union all

select deptno, sum(sal)

from emp

group by deptno;

 

+------+----------+

| NULL | sum(sal) |

+------+----------+

| NULL |    29025 |

|   10 |     8750 |

|   20 |    10875 |

|   30 |     9400 |

+------+----------+

 

 

문제138.

이름,입사일,순위를 출력하는데 순위가 먼저 입사한 사원순으로 순위를 부여하시오

SQL> select ename, hiredate,

dense_rank()over(order by hiredate asc) rn

from emp;

 

mysql> select ename, hiredate, (select count(*) + 1

from emp

where hiredate < e.hiredate) 순위

from emp e;

랭크함수가 안되서 스칼라 서브쿼리로 처리한다.

가장 먼저 입사한 사원은 0 이라서 +1 처리한거다.

 

 

 select ename, hiredate, (select count(*) + 1

from emp

where hiredate < e.hiredate) rn

from emp e

order by rn asc;

***스칼라서브 한글로 alias 처리 하면 에러뜸.

 

 

 

문제139.

이름,월급,순위를 출력하시오

(순위가 월급이 높은 사원에 대한 순위입니다)

 

mysql> select ename, sal,

(select count(*) +1

from emp

where sal>e.sal) rn

from emp e

order by rn asc;

 

+--------+------+------+

| ename  | sal  | rn   |

+--------+------+------+

| KING   | 5000 |    1 |

| FORD   | 3000 |    2 |

| SCOTT  | 3000 |    2 |

| JONES  | 2975 |    4 |

| BLAKE  | 2850 |    5 |

| CLARK  | 2450 |    6 |

| ALLEN  | 1600 |    7 |

| TURNER | 1500 |    8 |

| MILLER | 1300 |    9 |

| WARD   | 1250 |   10 |

| MARTIN | 1250 |   10 |

| ADAMS  | 1100 |   12 |

| JAMES  |  950 |   13 |

| SMITH  |  800 |   14 |

+--------+------+------+

 

 

 

문제140.

부서번호, 이름, 월급, 순위를 출력하는데

순위가 부서번호별로 각각 월급이 높은 순서대로 순위를 출력하시오

SQL> select deptno, ename, sal,

dense_rank()over(partition by deptno order by sal desc)

from emp;

 

mysql> select deptno, ename, sal,

(select count(*) +1

from emp

where deptno=e.deptno and

sal>e.sal

 

) as rn

from emp e

order by deptno, rn asc;

 

+--------+--------+------+------+

| deptno | ename  | sal  | rn   |

+--------+--------+------+------+

|     10 | KING   | 5000 |    1 |

|     10 | CLARK  | 2450 |    2 |

|     10 | MILLER | 1300 |    3 |

|     20 | FORD   | 3000 |    1 |

|     20 | SCOTT  | 3000 |    1 |

|     20 | JONES  | 2975 |    3 |

|     20 | ADAMS  | 1100 |    4 |

|     20 | SMITH  |  800 |    5 |

|     30 | BLAKE  | 2850 |    1 |

|     30 | ALLEN  | 1600 |    2 |

|     30 | TURNER | 1500 |    3 |

|     30 | WARD   | 1250 |    4 |

|     30 | MARTIN | 1250 |    4 |

|     30 | JAMES  |  950 |    6 |

+--------+--------+------+------+

 

 

 

 

문제141.

부서번호, 해당 부서번호에 속한 사원들의 이름을 가로로 출력하시오

SQL> select deptno,

listagg(ename,',') within group

(order by ename asc) ename

from emp

group by deptno;

 

mysql>select deptno,

group_concat(ename order by ename asc separator ',')

from emp

group by deptno;

 

+--------+------------------------------------------------------+

| deptno | group_concat(ename order by ename asc separator ',') |

+--------+------------------------------------------------------+

|     10 | CLARK,KING,MILLER                                    |

|     20 | ADAMS,FORD,JONES,SCOTT,SMITH                         |

|     30 | ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD                 |

+--------+------------------------------------------------------+

 

select deptno,

group_concat(ename order by ename)

from emp

group by deptno;

※ asc, separator, ',' default 값이다. 다른걸로 구분하고 싶으면 넣으면 된다.

 

 

 

문제142.(점심시간문제)

아래와 같이 결과를 출력하시오

SQL>select deptno,

listagg(ename|'('|sal|')',',') within group

(order by ename asc) ename

from emp

group by deptno;

 

mysql> select deptno,

group_concat(ename,concat('(',sal,')' ) order by ename asc separator ',')

from emp

group by deptno;

 

+--------+---------------------------------------------------------------------------+

| deptno | group_concat(ename,concat('(',sal,')' ) order by ename asc separator ',') |

+--------+---------------------------------------------------------------------------+

|     10 | CLARK(2450),KING(5000),MILLER(1300)                                       |

|     20 | ADAMS(1100),FORD(3000),JONES(2975),SCOTT(3000),SMITH(800)                 |

|     30 | ALLEN(1600),BLAKE(2850),JAMES(950),MARTIN(1250),TURNER(1500),WARD(1250)   |

|     70 | jack(4500)                                                                |

+--------+---------------------------------------------------------------------------+

 

 

문제143. 이름,부서위치를 출력하시오

mySQL 에서의 조인은 1999ANSI 문법

 

select e.ename, d.loc

from emp e join dept d

on e.deptno=d.deptno ;

 

 

 

 

문제144. 아래의 오라클 조인문장을 mysql 에서 구현하시오

SQL> select e.ename, d.loc

from emp e, dept d

where e.deptno(+)=d.deptno;   *emp 없는것을 갖고와라(=dept 있는걸 갖고와라)

 

mysql> select e.ename, d.loc

from emp e right outer join dept d

on (e.deptno=d.deptno);

 

+--------+----------+

| ename  | loc      |

+--------+----------+

| KING   | NEW YORK |

| BLAKE  | CHICAGO  |

| CLARK  | NEW YORK |

| JONES  | DALLAS   |

| MARTIN | CHICAGO  |

| ALLEN  | CHICAGO  |

| TURNER | CHICAGO  |

| JAMES  | CHICAGO  |

| WARD   | CHICAGO  |

| FORD   | DALLAS   |

| SMITH  | DALLAS   |

| SCOTT  | DALLAS   |

| ADAMS  | DALLAS   |

| MILLER | NEW YORK |

| NULL   | BOSTON   |

+--------+----------+

 

 

 

 

문제145. 아래의 오라클의 full outer join mysql 에서 구현하시오

** 하나 insert 하시오

insert into emp(empno, ename, sal, deptno )

values (2929, 'jack', 4500,70 );

 

SQL> select e.ename, d.loc

from emp e full outer join dept d

on (e.deptno = d.deptno) ;

 

mysql> select e.ename, d.loc

from emp e right outer join dept d

on (e.deptno=d.deptno)

union

select e.ename,d.loc

from emp e left outer join dept d

on (e.deptno=d.deptno);

 

 

 

 

문제. 146.(점심시간문제2)

아래와 같이 결과를 출력하시오

mysql> select ename, sal

from emp

where sal > (select sal from emp where ename='JONES');

 

+-------+------+

| ename | sal  |

+-------+------+

| KING  | 5000 |

| FORD  | 3000 |

| SCOTT | 3000 |

| jack  | 4500 |

+-------+------+

 

 

 

 

Mysql 에서의 DML

"오라클과의 가장 차이점이 있어서 반드시 알고 가야한다"

해커스 DBA 3 지민이의 선배 사원이 해커스 데이터를 삭제해서

장애가 난적이 있었음.

 

문제147.

SCOTT 월급을 0 으로 변경하시오

mysql>update emp

set sal=0

where ename='SCOTT';

 

그리고 rollback 하면 ok 뜨나 변경된 row 0 이다.

 

설명

mysql 자동 commint default 라서 rollback 안된다.

 

 

mysql> select @@autocommit;

+--------------+

| @@autocommit |

+--------------+

|            1 |

+--------------+

 

1 True

0 False

 

만약 기능이 싫다면

set autocommit = 0;

 

mysql> select @@autocommit;

+--------------+

| @@autocommit |

+--------------+

|            0 |

+--------------+

 

 

문제148.

사원 테이블을 전체 delete 하시오

그리고 rollback 되는지 확인하시오

 

mysql> delete from emp;

Query OK, 15 rows affected (0.02 sec)

 

mysql> rollback;

Query OK, 0 rows affected (0.00 sec)

 

 

 

 

 

문제149.

dept 테이블 생성 스크립트를 이용해서 dept2 테이블을 생성하고

dept2 테이블을 select 후에 rollback 하면

dept2 테이블이 어떻게 되는지 확인해보시오

 

dept 생성

CREATE TABLE dept2

 (DEPTNO int,

 DNAME VARCHAR(14),

 LOC VARCHAR(13) );

 

INSERT INTO dept2 VALUES (10, 'ACCOUNTING', 'NEW YORK');

INSERT INTO dept2 VALUES (20, 'RESEARCH', 'DALLAS');

INSERT INTO dept2 VALUES (30, 'SALES', 'CHICAGO');

INSERT INTO dept2 VALUES (40, 'OPERATIONS', 'BOSTON');

 

 

CTAS 이용

create table dept_backup

as

select * from dept;

 

 

 

 

Mysql 에서 DDL

-오라클과의 차이점

external table 관리가 오라클과 다르다

 

터미널창 하나 켜서 root 계정에서 cd /home 가고 위치확인 pwd

vi emp2.csv 열고

 

7839,KING,PRESIDENT,0,1981-11-17,5000,0,10

7698,BLAKE,MANAGER,7839,1981-05-01,2850,0,30

7782,CLARK,MANAGER,7839,1981-05-09,2450,0,10

7566,JONES,MANAGER,7839,1981-04-01,2975,0,20

7654,MARTIN,SALESMAN,7698,1981-09-10,1250,1400,30

7499,ALLEN,SALESMAN,7698,1981-02-11,1600,300,30

7844,TURNER,SALESMAN,7698,1981-08-21,1500,0,30

7900,JAMES,CLERK,7698,1981-12-11,950,0,30

7521,WARD,SALESMAN,7698,1981-02-23,1250,500,30

7902,FORD,ANALYST,7566,1981-12-11,3000,0,20

7369,SMITH,CLERK,7902,1980-12-09,800,0,20

7788,SCOTT,ANALYST,7566,1982-12-22,3000,0,20

7876,ADAMS,CLERK,7788,1983-01-15,1100,0,20

7934,MILLER,CLERK,7782,1982-01-11,1300,0,10

 

저장하고

 

mysql 에서

 

CREATE TABLE emp2 (

EMPNO int NOT NULL,

ENAME VARCHAR(10),

JOB VARCHAR(9),

MGR int,

HIREDATE DATE,

SAL int,

COMM int,

DEPTNO int );

 

load  data  local infile '/home/emp2.csv'

 into  table  emp2  fields  terminated  by ',';

 

select * from emp2;

 


728x90
반응형

'hadoop' 카테고리의 다른 글

10. 맵리듀스를 java 로 수행하기  (0) 2019.01.11
9. sqoop 설치 , sqoop 으로 오라클, hive 연동  (0) 2019.01.11
7. mongo db 설치, 설명  (0) 2019.01.11
6. PIG설치, 설명  (0) 2019.01.11
5. TAJO설치, 설명  (0) 2019.01.11