[Chapter8] MySQL 기초

Minseok Jo·2023년 4월 18일
0
post-thumbnail

1. DBMS와 MySQL

데이터베이스(DB, Database): 여러 사람이 공유해서 사용할 수 있는 데이터의 집합
데이터베이스 관리 시스템(DBMS): DB에 있는 데이터를 저장, 삭제, 검색, 수정 등을 가능하게 하는 프로그램. DBMS는 사용자나 응용 프로그램이 DB를 쉽게 이용할 수 있도록 해준다


2. MySQL 서버와 phpMyAdmin

MySQL 프로그램은 XAMPP 프로그램 내에 포함되어 있다.

1) MySQL 서버 구동하기
XAMPP 컨트롤 패널에서 Start를 눌러 MySQL 서버를 구동시켜주면 된다

⏬실행 결과
Start를 눌러도 Running state가 되지 않는 경우가 있다.
이미 해당 port가 사용중일 수 있으므로, Configure를 눌러서 PORT를 3306에서 임의로 변경해주면 된다.

2) phpMyAdmin 프로그램
MySQL 서버 프로그램이 구동된 다음에는 클라이언트, 즉 사용자 측에서 사용할 MySQL 프로그램이 필요하다. XAMPP 프로그램에서는 클라이언트용의 MySQL 프로그램을 제공한다.

MySQL 프로그램을 동작시키기 위해 브라우저에 http://localhost 를 입력하여 XAMPP 메인 화면에 접속한다.

⏬실행 결과

중앙 위쪽의 'phpMyAdmin' 버튼을 클릭하면 phpMyAdmin 프로그램이 나타난다

⏬실행 결과

이 phpMyAdmin 프로그램을 이용하여 데이터베이스에 데이터를 저장, 검색, 수정, 삭제 등을 할 수 있다.


3. 데이터베이스와 사용자 계정 생성

1) 데이터베이스 생성하기

메인 화면 위에 있는 메뉴 중 '데이터베이스'를 클릭하고, 데이터베이스명 박스에 sample을 입력하고 '만들기' 버튼을 클릭하면 좌측 데이터베이스 목록에 sampe 데이터 베이스가 생성된 것을 확인할 수 있다.


위와 같이 데이터베이스를 생성한 다음에는 sample 데이터베이스를 사용할 권한을 가진 MySQL 사용자 계정을 만들어야 한다.

2) 사용자 계정 생성하기

메뉴 중 '사용자 추가'를 클릭한뒤,
사용자명: user
호스트명: localhost
암호: 12345
재입력: 12345
사용자 추가 화면에서 다음과 같이 입력한 후 아래의 '실행' 버튼을 클릭한다

⏬실행 결과

새로운 사용자 계정이 만들어지면 phpMyAdmin에서 데이터베이스 작업을 할수 있는 권한을 부여해야 한다. 편의를 위해 새로운 사용자 계정 user에 기능 전체를 사용할 수 있는 권한을 부여하고자 한다.

사용자 계정 화면에서 user 계정 줄에 있는 '권한 수정' 버튼을 클릭한다

⏬실행 결과

권한 수정 화면에서 전체적 권한 항목에 '모두 체크'를 선택한 다음 화면 아래에 있는 '실행' 버튼을 클릭하면 권한이 업데이트 된다

⏬실행 결과

3) 사용자 계정으로 접속하기
지금까지는 phpMyAdmin에서 기본으로 설정된 관리자 계정인 root를 사용하여 왔다.

root 계정 대신에 사용자 계정 user로 접속하려면 \lampp\phpMyAdmin 폴더에 있는 config.inc.php 파일을 다음과 같이 수정해야 한다.
config→cookie로 수정하고, 따옴표 안에 있는 root를 삭제하고 저장해준다

⏬실행 결과

이후 웹 브라우저를 열고 주소창에 localhost를 입력하여 다시 phpMyAdmin에 접속하면 로그인 화면이 나타난다.
사용자명: user, 암호: 12345 를 입력 후 로그인하게 되면, 모든 준비가 완료된 것이다.

⏬실행 결과


4. DB 테이블 관리

1) 관계형 데이터베이스와 DB 테이블
관계형 데이터베이스에서는 모든 데이터를 2차원 테이블에 저장한 다음 데이터 검색, 수정, 삭제 등의 처리를 한다.
관계형 데이터베이스의 기본 구성 요소 3가지는 DB테이블, 필드, 레코드이다.

필드(Field): 각각의 열(Column)
레코드(Record): 각각의 행(Row) 데이터


2) 테이블 설계하기

필드명데이터 형Null추가 사항설명
numintnot nullauto_increment, primary, key레코드 번호
idchar(20)not null아이디
passchar(20)not null비밀번호

데이터형:
num 필드의 데이터형으로 사용된 int는 해당 필드에 저장되는 데이터가 정수임을 나타낸다. 나머지 필드의 char은 문자형 데이터를 의미한다.
char(20)은 영문(또는 숫자)를 20자까지 저장할 수 있는 공간을 의미한다.

not null:
not null은 필드의 데이터가 null이면 안된다는 의미이다.

추가 사항:
auto_increment
레코드를 입력시 필드 값이 자동 증가되는 것을 의미한다. 따라서 DB테이블에 레코드를 삽입할 때 num필드에 값을 직접 입력하지 않아도, 1부터 시작되는 레코드 번호가 자동으로 부여된다.

primary key
primary key는 레코드들을 서로 식별하는 데 사용되는 필드를 의미한다. 위의 경우 num 필드는 중복되지 않는 레코드 번호 값을 가지기 때문에 primary key로 사용된다.


3) 테이블 생성하기
phpMyAdmin에서 DB테이블 member를 만들고자 한다.

좌측의 sample 데이터베이스를 선택한 다음 화면 아래의 '콘솔' 버튼을 클릭한다.


이후 member 테이블을 만들기 위해 콘솔 창에 다음 명령을 입력한 다음 Ctrl+Enter 키를 눌려 명령을 실행한다.

create table member (
	num int not null auto_increment,
    id char(20) not null,
    pass char(20) not null,
    name char(10) not null,
    email char(20),
    primary key(num)
);

⏬실행 결과


4) 테이블 내용보기
왼쪽 member를 클릭하면 member 테이블에 저장된 내용을 볼 수 있다

phpMyADmin에서 member 테이블에 저장된 내용, 즉 레코드를 보여주는 화면이다. 아직은 member 테이블에 어떠한 내용도 저장하지 않았기 때문에 그림에서와 같이 member테이블이 비어있는 상태이다.


5) 테이블 구조보기
member 테이블 화면에서 상단의 '구조' 버튼을 클릭하면 member 테이블의 구조를 볼 수 있다.


4) 테이블 삭제하기
생성된 member 테이블을 삭제하려면 좌측의 sample 데이터베이스를 선택한 후, member 테이블 앞의 체크박스를 체크한 다음 '삭제' 버튼을 눌러주면 삭제할 수 있다.


5. 테이블에 레코드 삽입

1) SQL 명령 일괄 실행하기
SQL 명령을 텍스트 에디터에서 편집하여 파일로 저장한 다음, phpMyAdmin에서 그 파일을 불려들여 파일 내에 있는 SQL 명령을 일괄 실행할 수 있다.

/* customer_table.sql */
create table customer (
	num int not null auto_increment,
    name char(20) not null,
    tel char(15) not null,
    address char(100),
    gender char(1),
    age int,
    mileage int,
    primary key(num)
);    

좌측 sample 데이터베이스를 선택한 다음 상단의 '가져오기' 메뉴를 선택한다음 '파일 선택'에서 customer_table.sql 파일을 선택 후 하단의 '가져오기' 버튼을 클릭한다.
⏬실행 결과sample 데이터베이스에 'customer' 테이블이 생성된 것을 확인할 수 있다.


2) 데이터 삽입하기
DB테이블에 데이터를 삽입하는 insert into 명령의 형식은 다음과 같다.

insert into 테이블명 (필드1, 필드2, ...) values (값1, 값2, ...);

콘솔창에 SQL명령을 입력한 다음 Ctrl+Enter를 눌러 레코드를 삽입할 수 있다.

insert into customer (name, tel, address, gender, age, mileage) 
values ('LowAngle', '01012345678', '서울시', 'M', 20, 1000);

⏬실행 결과
insert into 명령을 사용할 때 num 필드에는 데이터를 입력하지 않았지만, 1이 저장되어 있는 것을 알 수 있다. 이것은 customer 테이블을 생성할 때 num 필드에 auto_increment 옵션을 설정했기 때문이다.


6. 레코드 검색과 관리

1) 전체 레코드 검색하기
DB 테이블에 저장된 모든 필드와 레코드를 보여주는 SQL 명령의 형식은 다음과 같다.

select * from 테이블명;

phpMyAdmin에서 customer 테이블에 저장된 모든 데이터 내용을 보려면, 'sample' 데이터베이스를 선택한 뒤, 콘솔 창에 다음 명령을 입력한 다음 x Ctrl+Enter키를 눌러 명령을 실행한다.

select * from customer;

⏬실행 결과
만약 전체 레코드에 대해 특정 필드만 출력하려면 다음과 같은 select 명령을 사용한다.

select name, tel from customer;

⏬실행 결과


2) 특정 조건 레코드 검색하기
DB테이블에 저장되어 있는 레코드 중에서 특정 조건을 만족시키는 레코드를 검색하는 SQL 명령의 형식은 다음과 같다.

select 필드1, 필드2, ... from 테이블명 where 조건식;

ex 1) 여성 고객의 이름, 성별, 주소, 나이 검색하기

select name, gender, address, age from customer where gender='W';

⏬실행 결과

ex 2) 마일리지가 10,000점 이상인 고객의 이름, 마일리지, 주소 검색하기

select name, mileage, address from customer where mileague>=10000;

⏬실행 결과


ex 3) 20대 남성 고객의 이름, 성별, 나이, 전화번호 검색하기

select name, gender, age, tel from customer where (age>= 20&&gender='M');

⏬실행 결과&&는 and로 입력해도 되며, 괄호의 유무도 상관이 없다.


3) 특정 문자열 레코드 검색하기
DB 테이블에 저장되어 있는 레코드 중에서 특정 필드에 특정 문자열을 가진 레코드를 검색하는 SQL 명령의 형식은 다음과 같다.

select 필드1, 필드2, ... from 테이블명 where 필드 like 수식;

ex 1) 김씨 고객의 모든 필드 검색하기

select * from customer where name like '김%';

여기서 '김%'는 '김'으로 시작하는 모든 문자열을 의미한다.

⏬실행 결과

ex 2) 이름에 '영'이 있는 고객의 이름, 전화번호 검색하기

select name, tel from customer where name like '%영%'

여기서 사용된 '%영%'는 '영'이 포함된 모든 문자열을 의미한다.

⏬실행 결과

ex 3) 은평구에 사는 여성 고객의 모든 필드 검색하기

select * from customer where (address like '%은평구%' && gender='W');

⏬실행 결과


4) 레코드 정렬하기
DB 테이블에 저장되어 있는 전체 레코드를 특정 필드를 기준으로 하여 오름차순으로 정렬하는 SQL 명령의 형식은 다음과 같다.

select 필드1, 필드2, ... from 테이블명 order by 기준필드;

ex 1) 이름 순으로 레코드 정렬하기

select name, tel, address from customer order by name;

⏬실행 결과


ex 2) 서울에 사는 고객의 레코드를 나이 내림차순으로 정렬하기

select * from customer where address like '서울%' order by age desc;

SQL 명령 뒤에 사용된 'desc'는 'descending'의 약어로 이 옵션을 사용하면 내림차순으로 정렬한다.

⏬실행 결과


5) 레코드 수정하기
DB 테이블에서 조건식을 만족하는 특정 레코드에 대해 특정 필드의 값을 수정하는 update 명령의 사용형식은 다음과 같다.

update 테이블명 set 필드1 = 값, ... where 조건식;

ex 1) '김문영'의 성별을 여성으로 변경하기

update customer set gender='W' where name = '김문영';

⏬실행 결과


ex 2) '이상훈'의 마일리지를 0으로 초기화하기

update customer set mileage=0 where name='이상훈';

⏬실행 결과


ex 3) 30대 여성의 마일리지를 10,000으로 수정하기

update customer set mileage=10000 where (gender='W' && age>=30);

⏬실행 결과


6) 레코드 삭제하기
DB 테이블에서 조건식을 만족하는 특정 레코드를 삭제하는 delete from 명령의 사용형식은 다음과 같다.

delete from 테이블명 where 조건식;

ex 1) 이름이 '유지수'인 레코드 삭제하기

delete from customer where name='유지수';

⏬실행 결과


ex 2) 특정 주소 레코드 삭제하기

먼저 해당 주소를 가진 레코드를 다음 명령으로 찾는다

select num, name, address from customer
where address like '%성남시 중원구 광명로 123%';

⏬실행 결과 해당 주소를 가진 고객의 이름은 '박혜빈'이며 레코드 번호가 8임을 알 수 있다.
따라서 레코드 번호가 8인 레코드를 삭제해준다.

delete from customer where num=8;

⏬실행 결과

ex 3) 전체 레코드 삭제하기

delete from customer;

⏬실행 결과


0개의 댓글