[MySQL] MySQL 기초 정리 [2]

MySQL 기초를 정리하며 데이터베이스 배우기

Featured image

목차

MySQL 데이터 백업 및 복원

데이터베이스를 백업하고 백업 파일을 복원하는 기능을 사용해보자.

web이라는 DB의 grade 테이블을 백업시키는 과정이다. 먼저 exit를 이용해 명령 프롬프트로 나가 실행해야한다.

mysqldump -uroot -p 데이터베이스명 [테이블명] > 백업파일명.sql

mysqldump -uroot -p web grade > backup.sql

이렇게 백업시켜놓은 파일을 저장해두고 만약 데이터베이스가 유실되거나 삭제된 경우에 복원할 수 있다.

mysql -uroot -picc 데이터베이스명 < 백업파일명.sql

mysql -uroot -picc web < backup.sql

외부파일에서 데이터 입력

Excel, 스프레드시트, 텍스트 파일에서 DB로 옮겨야 할 때 사용한다. insert into 명령은 한번에 많은 데이터를 입력하기 어렵기 때문이다.

load data local infile 'input.txt' into table 테이블명;

위의 명령으로 데이터를 옮길 수 있다. 하지만 저장된 데이터들은 TAB으로 구분되어야 한다.

TAB이 아닌 다른 구분자로 구분되어있을 경우, fields terminated by '구분자'를 추가해야 한다.

input.txt 파일을 grade 테이블로 옮기는 명령이며 구분자는 버티컬 바로 되어있는 예시이다.

load data local infile 'input.txt' into table grade fields terminated by '|';

여기서 중요한 점은 테이블을 미리 만들어놔야하고 텍스트 파일의 컬럼 수와 테이블의 필드 수가 같아야만 데이터가 삽입된다.

MySQL 기능

모든 기능을 정리하진 않았지만 일부의 기능들을 정리해보았다.

auto_increment 속성

auto_increment 속성은 Num 컬럼의 경우, 자동 증가되도록 하는 속성이다.

num int auto_increment

alter table grade change num num int key auto_increment;

Num 데이터 입력 시, ‘null’로 빈 값 입력하면 자동으로 값을 생성하여 저장한다.

Order by

데이터를 검색할 때 특정 컬럼을 기준으로 정렬하는 명령이다. 오름차순으로 정리할 때 ASC라고 표기하지만 대부분 생략한다. 내림차순은 DESC로 표기하며 사용할 경우 표기한다.

select name, project from grade order by project;

//프로젝트 컬럼을 기준으로 오름차순 정렬하여 보여준다.

select name, project from grade order by project desc;

//프로젝트 컬럼을 기준으로 내림차순 정렬하여 보여준다.

여러 기준으로 정렬을 할 수도 있다. 같은 정렬 기준일 경우 두 번째 기준으로 정렬할 수 있다.

select name, project from grade order by project asc, quiz desc;

//프로젝트를 기준으로 오름차순 정렬하고, 같은 점수가 있을 시 퀴즈 점수로 내림차순 정렬

Select 명령에서의 연산

where을 사용하여 조건을 입력할 경우 ‘=’말고도 이상, 이하, 초과, 미만 등 표현할 수 있다.

테이블에서 연산을 하여 출력을 할 수 있다.

select (attendance + term + quiz) / 3 as total from grade;

//grade 테이블에서 attendance와 term, quiz 컬럼의 값을 연산하고, total로 출력한다.

데이터 패턴 검색

와일드카드 문자와 like, not like을 사용하여 검색을 할 수 있다. like는 참을 나타내며 not like은 거짓을 나타낸다.

select * from 테이블 where name like "와일드카드 문자";

언더바(_)를 이용하여 글자 수로 검색도 가능하다.

select * from 테이블 where name like "___";

MySQL 함수

레코드의 개수를 세는 함수

count()는 레코드의 수를 출력하는 함수이다.

select count(*) from student where gender = '남자';

distinct는 중복된 레코드를 출력하지 않도록 하는 함수이며, count()와 같이 사용할 수 있다.

select distinct address from students;

select count(distinct address) from students;

group by는 그룹을 설정하여 대표 값을 구하는 함수이다.

select address, count(*) from students group by address;

limit은 출력 개수를 제한하는 함수이다.

select * from students where address = '천안' limit 3;

수학 함수

avg()는 데이터의 평균을 출력하는 함수이다.

select avg(컬럼) from 테이블;

max(), min()은 데이터의 최대값과 최소값을 출력하는 함수이다.

select max(컬럼) from 테이블;

select min(컬럼) from 테이블;

round()는 소수점을 반올림 해주는 함수로, 출력할 데이터 뒤에 쓰는 숫자는 출력할 소수 밑의 자릿수이다.

select round(123.1234567, 1) from 테이블;

-> 123.1

sum()은 데이터의 합계를 출력하는 함수이다.

select sum(컬럼) from 테이블;

날짜 관련 함수

monthname()은 월을 나타내는 함수이다.

select * from 테이블 where monthname(birth) = march;

year(), month(), dayofmonth()은 각각 연도, 월, 일을 반환해주는 함수이다.

select * from 테이블 where month(birth) = dayofmonth(birth);

current_date, current_time, now()는 각각 현재 날짜, 현재 시간, 현재 날짜와 시간을 모두 반환해주는 함수이다.

select * from 테이블 where month(birth) = month(current_date);

to_days()date 날짜에 0년 이후 날의 365일에 합한 수를 반환해주는 함수이다.

select (to_days(now( )) – to_days(‘1980-3-20’))/365 as Age;

date_add(), date_sub()는 각각 현재 시간에서 시간을 더하고 빼는 함수이다. 초 부터 년 까지 더하고 뺄 수 있다. 현재시간은 2024-01-10 18:00:00 이다.

select date_add(now(), interval 1 second)

-> 2024-01-10 18:00:01

select date_sub(now(), interval 1 year)

-> 2023-01-10 18:00:00