아래 코드들은 macOS 의 terminal 에서 수행되었습니다.
[부스트코스]웹 프로그래밍 강좌를 참고하였습니다.
MySQL 설치하기
MySQL 서버 실행하기
> mysql.server start
MySQL 서버 상태 확인하기
> mysql.server status
MySQL 서버 종료하기
> mysql.server stop
만약 운영체제 백그라운드(데몬)로 MySQL 을 실행시키고 싶다면 아래의 방법을 사용하기 바랍니다.
MySQL 을 백그라운드로 실행하기
> brew services start mysql
백그라운드에서 MySQL 종료하기
> brew services stop mysql
관리자 계정으로 MySQL 시스템에 접속하기
> mysql -uroot -p
Mac 사용자는 초기 암호가 없으므로 그냥 엔터를 입력하면 됩니다.
DataBase 생성하기
사용자 계정 생성하기
mysql> create user '유저이름'@'%' identified by '유저이름';
사용자에게 모든 권한 부여하기
mysql> grant all privileges on 데이터베이스이름.* to '유저이름'@'%';
.* 는 모든 권한을 부여하겠다는 의미입니다.
% 는 어떤 클라이언트에서든 접근 가능하다는 의미입니다. 만약 localhost 에서만 접근 가능하도록 하고 싶다면, % 대신 localhost 를 입력하면 됩니다.
변경사항 적용하기
mysql> flush privileges;
위 명령어를 입력해야 사용자 권한 변경이 활성화됩니다.
MySQL 에서 로그아웃하기
mysql> exit
사용자 계정으로 MySQL 시스템에 접속하기
mysql> -h호스트이름 -u유저이름 -p 데이터베이스이름
호스트이름은 localhost 또는 ip 주소가 될 수 있습니다.
Select 구문을 사용해서 MySQL 버전과 현재 시간 출력하기
mysql> select version(), current_date;
모든 데이터베이스 확인하기
mysql> show databases;
다른 데이터베이스 사용하기
mysql> use 데이터베이스이름;
사용하고자 하는 데이터베이스가 존재해야 합니다.
현재 계정이 해당 데이터베이스에 대한 권한이 존재해야 합니다.
테이블 생성하기 (CREATE)
mysql> CREATE table 테이블이름 (
필드이름1 필드타입1 옵션,
필드이름2 필드타입2 옵션,
...
);
MySQL 타입에 대해서는 여기를 참조하시기 바랍니다.
옵션으로는 NULL 값을 허용할지 말지[NULL][NOT NULL], 디폴트값을 사용할 것인지[DEFAULT ] 등을 사용할 수 있습니다.
테이블 이름 변경하기 (ALTER … rename)
mysql> ALTER table 테이블이름 rename 새테이블이름;
테이블 삭제하기 (DROP)
mysql> DROP table 테이블이름;
테이블에 칼럼 추가하기 (ALTER … add)
mysql> ALTER table 테이블이름 add 필드이름 필드타입 옵션;
테이블에서 칼럼 수정하기 (ALTER … change)
mysql> ALTER table 테이블이름 change 필드이름 새필드이름 필드타입 옵션;
테이블에서 칼럼 삭제하기 (ALTER … drop)
mysql> ALTER table 테이블이름 drop 필드이름;
데이터 검색하기 (SELECT)
mysql> SELECT 데이터이름 FROM 테이블이름;
데이터 이름 대신 * 를 사용해서 테이블의 모든 데이터를 검색할 수 있습니다.
문자열 결합하기 (concat)
mysql> SELECT concat(칼럼이름1, '연결자', 칼럼이름2) FROM 테이블이름;
중복 제거하기 (distinct)
mysql> SELECT distinct 데이터이름;
정렬하기 (order by)
mysql> SELECT 데이터이름 order by 칼럼이름;
mysql> SELECT 데이터이름 order by 칼럼이름 desc;
desc 는 descending, 즉 내림차순을 의미합니다.
특정 행만 검색하기 (where)
mysql> SELECT 데이터이름 where 조건;
조건으로는 비교연산자, 논리연산자, in, like 등이 들어갈 수 있습니다.
mysql> SELECT 데이터이름 where 칼럼이름 in (값1, 값2 ...)
칼럼에서 값1, 값2 … 를 만족하는 모든 데이터를 보여달라는 의미입니다.
mysql> SELECT 데이터이름 where 칼럼이름 like 문자열;
칼럼에서 문자열과 같은 모든 데이터를 보여달라는 의미입니다.
와일드카드를 사용할 수 있습니다. % 는 모든 문자열, _ 는 하나의 모든 문자와 매칭됩니다.
타입을 변경하기 (cast as)
mysql> SELECT cast(표현식 as 타입);
그 외 유용한 함수들 (upper, lower, substring, lpad, rpad)
mysql> SELECT upper(칼럼이름1), lower(칼럼이름2) FROM 테이블이름;
글자 그대로, 칼럼의 데이터들을 모두 대문자로 출력하거나 소문자로 출력합니다.
mysql> SELECT substring(칼럼이름, 시작위치, 문자갯수) FROM 테이블이름;
문자열의 시작위치에서 문자갯수만큼의 문자를 출력합니다.
데이터베이스들은 일반적으로 인덱스가 1부터 시작하며, 이는 mysql 도 마찬가지라는 점에 주의하시기 바랍니다.
mysql> SELECT lpad(칼럼이름1, 정수값, '대체문자'), rpad(칼럼이름2, 정수값, '대체문자') from 테이블이름;
lpad 는 만약 정수값이 문자열의 길이보다 크다면 왼쪽부터 빈 공간을 대체문자로 채웁니다. rpad 는 같은 방식으로 오른쪽부터 채웁니다.
이 외외도 정말 많은 함수들이 존재합니다. 한번 찾아서 시도해보시기 바랍니다.
그룹 함수
지금까지 함수들은 모두 여러개의 칼럼에 대해서 여러개의 칼럼을 결과로 출력했습니다. 25개의 데이터가 있으면 함수에 대한 25개의 결과값이 반환되는 식입니다. 그러나 여러 개의 칼럼에 대해 하나의 결과만을 반환하는 함수도 있습니다. 이를 그룹함수라고 합니다.
mysql> SELECT count(표현식);
그룹함수에는 count 이외에도 avg, min, max, sum 등의 이름만 봐도 무슨일을 할 지 느낌이 오는 함수들이 있습니다.
칼럼별로 분리하기 (group by)
mysql> SELECT count(표현식) group by 칼럼이름;
그룹 함수와 일반 함수를 혼용해서 사용할 때 주의하시기 바랍니다. 오라클 데이터베이스는 이러한 경우 에러를 발생시키지만 MySQL 은 그러지 않습니다.
데이터 입력하기 (INSERT)
mysql> INSERT INTO 테이블명(필드1, 필드2, 필드3 ... ) VALUES (값1, 값2, 값3 ... );
필드명은 생략할 수 있습니다.
데이터 갱신하기 (UPDATE)
mysql> UPDATE 테이블이름 SET 필드1=값1 필드2=값2, 필드3=값3 ... WHERE 조건식;
데이터 삭제하기 (DELETE)
mysql> DELETE FROM 테이블명 WHERE 조건식;
데이터를 갱신하거나 삭제하는 경우, 조건식을 잘못 쓰거나 하는 경우 데이터베이스에 치명적인 행동을 저질러버릴 수 있습니다. 그래서 보통 직접 코드를 수행하기 전에 테스트코드를 수행하는 편이 훨씬 안전합니다.