https://dev.mysql.com/downloads/windows/installer/8.0.html
해당 사이트에서 용량 큰 걸로 다운로드 > MySQL installer실행 > 모두 Next 버튼 누르다가 custom 누르고 Next > 여기서 MySQL Server 8.0.21 – X64를 선택하고 ▶ 버튼을 클릭 > 같은 방법으로 [MySQL Workbench 8.0.21 – X64], [Samples and Examples 8.0.21 – X86]도 추가 > execute를 눌러 설치하고 next > 반복 > 기억할 수 있는 비밀번호 설정 > 다시 execute, next 반복 > 끝 > MySQL Workbench 접속
- root계정에 아까 지정한 비밀번호로 접속
- 원기둥 모양의 버튼을 누른다 >
- Charset/Collection : utf8, utf8_general_ci 누르고 apply 버튼을 눌러 스키마생성
- 홈 버튼을 누르고 + 버튼을 눌러 Madang 계정을 생성
- 마당계정으로 바로 들어와서 사용
(만약 이렇게 하지 않으면 쿼리문에서 테이블을 지정할때 스키마명.테이블을 쳐야 되기때문에 따로 계정을 생성한다.)
- 왼쪽 화면에서 madang 스키마 클릭
- Tables 우클릭 Create Table.. 클릭
- Table Name: test
- 우측 상단⏫버튼 누르고 Column Name: id, Datatype: int, PK, NN(notnull) 클릭
- 같은방법으로 아래로 (name, varchar(10)), (age, int), (email, varchar(20)) 입력 후 Apply버튼 클릭
- 다음과 같이 DDL문을 자동으로 만들어 주는걸 확인할 수 있다.
- Querry 1로 다시 오기
- use madang; (madang db설정이 안되어 있을 시 설정을 위해)
- INSERT INTO test(id, name, age, email) VALUES ('hong', '홍길동', 20, 'hong@naver.com'); 입력
- error가 나올텐데 잘 보면 위에서 id의 데이터 타입을 int(정수)로 설정 했기 때문에 alter를 사용해 varchar로 바꾼다
- test 테이블을 클릭후 🔧이거와 비슷한 아이콘을 누르고 ⏫버튼을 다시 누른 뒤 id의 datatype을 varchar(10)으로 바꾼다
- insert문 재실행
- SELECT * FROM test; 문을 실행해서 컬럼이 추가된 것을 확인할 수 있다.
- 윈도우+R 버튼을 눌러 CMD 입력
- mysql -u계정명(root) -p 입력
- 지정해둔 비밀번호 입력
- use madang 을 입력하여 스키마 설정
- sql 쓰는법 줄바꿈은 enter 마무리엔 세미콜론 필수
- 위에서 사용한 select 문을 실행해 보자
CLI를 통해 이제 워크벤치를 실행하지 않고도 작업을 할 수 있는 환경을 만들어 보았다.
- cmd창 열기
- mysqldump -uroot -p madang(백업할 db명) > madang(파일명).dmp 엔터 후 설정한 비밀번호 입력
- cmd 창에 적혀있는 파일 디텍토리에 가면 madang.dmp 파일이 설치되어 있는것을 확인 할 수 있다
- mysql에서 madang2 db를 만든다
- cmd창으로 돌아오기
- mysql -uroot -p madang2 < madang.dmp 엔터
Oracle 에선 상위 n개의 레코드를 조회 하기 위해선 서브 쿼리를 사용해야 한다... 하지만 MySQL에서는 LIMIT를 사용해서 간단하게 조회 할 수 있는데 예제를 통해 알아보자
직원중 급여순으로 (오름차순) 가장 적게 받는 한명의 이름과 급여를 조회
Oracle
select ename, salary from (
select ename, salary from emp order by salary
) a
where rownum = 1;
MySQL
select ename, salary from emp order by salary limit 1;
이를 통해 가장 큰 차이점으로는
1. 페이징 처리
2. LIMIT를 통해 시작인덱스와 개수를 통해 간단하게 더 다양한 데이터를 조회 할 수 있다.
직원의 상위 10개의 자료를 모두 조회
select * from EMP limit 0,10;
이와 같이 사용 할 수 있다.
Oracle에선 sysdate를 사용하는 반면
MySQL에서는
select now(), sysdate(), current_date(), curdate(), curtime()
이 문법들을 사용해 오늘의 날짜 데이터를 조회 할 수 있다.
(+ FROM DUAL 없이 조회 할 수 있다.)
Oracle
SELECT TRUNC(SYSDATE - TO_DATE('2021-01-01')) FROM dual;
MySQL
SELECT datediff(now(), '2021-01-01'));
(확연한 차이...)
select date_sub(now(), interval 100 day);
select date_add(now(), interval 100 day);
select date_format(now(), '%Y-%M-%D %H:%i:%S');

Oracle에선 nvl을 사용했으나
MySQL에선 nvl 대신 ifnull을 사용하면 된다
Oracle에선 decode, case함수를 사용했으나
MySQL에선 if(조건식, '맞으면 출력', '틀리면 출력') 함수 하나로 해결된다
Oracle에선 문자열 결합만 가능했다
SELECT ename, job, CONCAT(ename, job) FROM emp;
MySQL에선 좀더 다양하게 사용이 가능해진다
(사용자가 원하는대로 문자열 결합이 가능)
select concat(ename, ':', job, ':', mgr) from emp;
Oracle에서의 장점?이라 한다면 inline view를 마쳤을 때, as(별칭)을 무조건 달지 않아도 조회가 됐으나
MySQL에서는 as(알리아스)가 필수다
Oracle에서 사용했던 sequence없는 대신, AI(auto increment)가 대신 존재
(중요)라고 필기 했는데 AI에 대한 보충 공부가 필요한듯 하다
insert시 ai옵션이 붙은 컬럼은 작성하지 않음 (memberno가 ai옵션이 붙음)
insert into test (name) values('홍길동');
select * from test;