MySQL은 데이터베이스 소프트웨어입니다. 일반적으로 데이터를 추가하거나 검색, 추출하는 기능을 모두 포함해서 데이터베이라고 부릅니다.

MySQL은 세계에서 가장 많이 쓰이는 오픈 소스의 관계형 데이터베이스 관리 시스템 (RDBMS)이다. MySQL은 PHP 스크립트 언어와 상호 연동이 잘 되면서 오픈소스로 개발된 무료 프로그램입니다. 그래서 홈페이지나 쇼핑몰(워드프레스,Cafe24,제로보드,그누보드) 등 일반적인 웹 개발에 널리 사용하고 있습니다.

MAMP 설치

  • MAMP
  • CMD 검색한 후 실행
  • (경로 이동) 해당 폴더로 이동 \MAMP\bin\mysql\bin
  • (MySQL 접속) mysql -uroot -proot

데이터 베이스 만들기

create database 데이터베이스 이름;

데이터 베이스 보기

show 데이터베이스 이름;

데이터 베이스 삭제하기

drop database 데이터베이스 이름;

데이터 베이스 사용

use 데이터베이스 이름;

테이블은 데이터베이스 내에 정보를 담는 역할을 합니다.

숫자형 데이터
데이터형 byte 저장 가능 수 양의 정수 전환시 저장 가능 수
tinying 1byte -128 ~ 127 0 ~ 255
smallint 2byte -32768 ~ 32767 0 ~ 65535
mediumunt 3byte -8388608 ~ 8388607 0 ~ 16777215
int 또는 integer 4byte -2147493648 ~ 2147493647 0 ~ 4294967295
bigint 8byte -9223372036854775858 ~ 9223372036854775857 0 ~ 18446744073709551615
문자형 데이터
데이터형 저장 가능 글자 수
char 255
verchar 255
tinytext 255
text 65535
mediumtext 16777215
longtext 4294967295
enum 지정된 값 중 한 가지 값만 사용 가능
set 지정된 값 중 여러가지 값을 사용 가능
날자형 데이터
데이터형 저장범위 표시 형식 크기
date 1001-01-01 ~ 9999-12-31 YYYY-MM-DD 3byte
datetime 1001-01-01 00:00:00 ~ 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 8byte
timestamp 1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 YYYYMMDDHHMMSS 4byte
time -838:59:59 ~ 838:59:59 HH:MM:SS 3byte
year 1901~2155 YYYY 1byte

테이블

create database이름 테이블명( 필드명 데이터형 필드 설명 )인코딩 설정 데이블 설명

create table myMember(
myMemberID int unsigned auto_increment comment '고객의 고유번호',
useID varchar(15) not null comment '고객 아이디',
uname varchar(10) not null comment '고객명',
upassword varchar(30) not null comment '고객 비밀번호',
phone varchar(30) not null comment '핸드폰 번호',
email varchar(30) not null comment '고객 이메일 주소',
birthDay char(10) not null comment '고객의 생일',
gender enum( 'm', 'w', 'x' ) default 'x' comment '고객 성별 m은 남성 w은 여성 x는 선택하지 않음',
regTime datetime not null comment '회원가입 시간',
primary key(myMemberID))
charset=utf8 comment='고객 정보 테이블';

테이블 목록 보기

show 테이블 명

테이블 보기

desc 테이블 명

테이블 삭제

desc table 테이블명


테이블 초기화하기

TRUNCATE 테이블명

TRUNCATE myMember;


필드 추가하기

ALTER TABLE mytable ADD 추가할 필드명 옵션 코멘트 위치


ALTER TABLE mytable ADD gender2 enum('m','w','x')
default 'x' comment '고객 성별 m은 남성 w은 여성 x는 선택하지 않음' AFTER gender;

필드 삭제하기

ALTER TABLE 테이블명 DROP 삭제할 필드명


ALTER TABLE mytable DROP gender2;

필드 수정하기

ALTER TABLE 테이블명 MODIFY 변경할 필드명 옵션 코멘트 위치


ALTER TABLE mytable MODIFY gender enum('m','w') COMMENT '고객 성명 m은 남 w 여';

데이터 입력하기

INSERT INTO 테이블명(입력할 필드명) VALUES(입력할 데이터);

INSERT INTO mymember(useID, uname, upassword, email, birthDay, gender, regTime)
VALUES('leehun','이재훈','1234','junfn@naver.com','1994-12-28','m','now()');

INSERT INTO mymember(useID, uname, upassword, email, birthDay, gender, regTime)
VALUES('gamulchi','가물치','1234','gbdsdgzx@naver.com','1994-10-29','m','now()');

INSERT INTO mymember(useID, uname, upassword, email, birthDay, gender, regTime)
VALUES('bbagasari','빠가사리','1234','njjg23@naver.com','1994-05-08','m','now()');

INSERT INTO mymember(useID, uname, upassword, email, birthDay, gender, regTime)
VALUES('chambongau','참붕어','1234','xzvcx@naver.com','1994-07-17','m','now()');

INSERT INTO mymember(useID, uname, upassword, email, birthDay, gender, regTime)
VALUES('minmuljangau','민물장어','1234','fqse@naver.com','1994-01-11','m','now()');

데이터 불러오기

SELECT 필드명 FROM 테이블명

SELECT name, useID FROM mymember

데이터 전체 불러오기

SELECT * FROM 테이블명

SELECT * FROM mymember;


조건에 따라 데이터를 불러오기(WHERE문)

SELECT * FROM 테이블명 WHERE 필드명 조건식 값

회원 아이디 1번 정보를 검색

SELECT * FROM mymember WHERE myMemberID = 1


회원 메일 주소에 '12' 텍스트가 있는지 검색

SELECT * FROM myMember WHERE email LIKE '%f%';


회원 아이디가 1보다 크거나 3보다 작은 경우 검색

SELECT * FROM myMember WHERE myMemberID >=1 AND myMemberID <=3;


이름의 필드 값이 첫글자가 '빠'이거나 '민'인 사람 검색

SELECT * FROM myMember WHERE uname LIKE '빠%' OR uname LIKE '민%';

UPDATE문

UPDATE 테이블명 SET 필드명 값 조건

회원 아이디 5번의 핸드폰 번호를 0으로 변경

UPDATE myMember SET phone = 0 WHERE myMemberID = 5;


회원 아이디 5번의 핸드폰 번호를 변경, 아이디 변경

UPDATE myMember SET phone = '010-5106-2049', useID = 'leehun' WHERE myMemberID = 5;


모든 회원의 데이터를 변경

UPDATE myMember SET phone = '010-2904-3282';

DELETE FROM 테이블명 조건

회원 아이디 5번을 삭제

DELETE FROM myMember WHERE myMemberID = 5;


회원 아이디 1번부터 3번까지 삭제

DELETE FROM myMember WHERE myMemberID IN(1,2,3);


INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regtime) VALUES('leehun','황상연','1234','010-1111-2222','leehun@naver.com','1999-11-11','m',now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime) VALUES('ioio2034','이진희','1234','010-9495-3333','ioio2034@naver.com','1994-05-12','w',now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime) VALUES('goka','심현정','1234','010-2222-3333', 'guswjd0469@naver.com','1997-11-17','w',now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime) VALUES('hanaziro', '최하나', '1234', '010-5255-4448','hanaziro9@gmail.com','1991-11-18','w',now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime) VALUES('kimjutan', '김주현', '123456', '010-3111-9993', 'wngus3277@naver.com', '1994-03-11', 'm', now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regtime) VALUES ('sowarnye', '박소원', '123', '010-1111-1111', 'pppwoon@naver.com', '1994-10-10', 'w', now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay,gender,regTime) VALUES('leehun','이재훈','123456','010-1113-7222','wognsl305@naver.com','1994-12-28','m',now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime) VALUES('monopraise','강현선','1289','010-5558-0555','mono5236@naver.com','1994-02-22','m',now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthday, gender, regtime) VALUES('kioo9235','임정열','1234','010-8888-3333','it3285@naver.com','1992-11-27','m',now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regtime) VALUES('kyoungmin','김경민','1234','010-7799-9999','rudals3192@naver.com','1994-12-28','m',now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay,gender,regTime) VALUES('alflal4', '이미림', '1234', '010-0551-2202', 'suger104@naver.com', '1993-03-02', 'w', now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regtime) VALUES('suh4522','박수현','1234','010-7777-4444','suh4522@naver.com','1996-05-11','w',now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regtime) VALUES('asura','김민수','1899','010-2222-0000','vo2113@naver.com','1999-03-25','m',now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay,gender,regTime) VALUES('kingjeongin','박정인','1234','010-9999-3550','jeongin1689@naver.com','1998-10-27','w',now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay,gender,regTime) VALUES('qweryop93','전혜경','1234','010-7777-9666','dog41004@naver.com','1993-04-19','w',now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regtime)VALUES('shingaeul','신가을','1234','010-6666-8888','ilim1908@naver.com','1998-10-08','w',now());


create table prodReview(
prodReviewID int unsigned auto_increment comment '리뷰의 고유번호',
myMemberID int unsigned comment '리뷰를 작성한 회원번호',
content tinytext comment '리뷰 내용',
regTime datetime not null comment '회원가입 시간',
primary key(prodReviewID))
charset=utf8 comment='상품 리뷰';

INSERT INTO prodReview(myMemberID, content, regTime) VALUES(2, '이 신발 너무 편하고 좋습니다.', now());
INSERT INTO prodReview(myMemberID, content, regTime) VALUES(3, '신발 ㅆㅅㅌㅊ', now());
INSERT INTO prodReview(myMemberID, content, regTime) VALUES(4, '발 아파요', now());
INSERT INTO prodReview(myMemberID, content, regTime) VALUES(5, '디자인 이뻐요', now());
INSERT INTO prodReview(myMemberID, content, regTime) VALUES(6, '배송 2개월 걸림', now());
INSERT INTO prodReview(myMemberID, content, regTime) VALUES(7, '신발', now());
INSERT INTO prodReview(myMemberID, content, regTime) VALUES(8, '편해요', now());

JOIN문 사용하기

SELECT 필드명 FROM 테이블명 엘리어스 JOIN 연결할 테이블명 엘리어스 ON(두 테이블의 연결고리 역할을 할 필드 조건문)

SELECT m.uname, r.content, r.regTime FROM myMember m JOIN prodReview r ON(m.myMemberID = r.myMemberID); 


필드명을 변경하여 사용하기

SELECT 필드명 AS 기존 필드명 대신 출력할 필드명 FROM 테이블명

SELECT m.uname, r.content, r.regTime AS reviewRegTime FROM myMember m JOIN prodReview r ON(m.myMemberID = r.myMemberID);


모든 필드 보이기(LEFT)

SELECT 필드명 FROM 테이블명 엘리어스 LEFT JOIN 연결할 테이블명 엘리어스 ON(두 테이블의 연결고리 역할을 할 필드 조건문)

SELECT m.uname, r.content, r.regTime AS reviewRegTime FROM myMember m LEFT JOIN prodReview r ON(m.myMemberID = r.myMemberID);

집계 함수는 레코드의 수, 값들의 합계, 평균, 최대값, 최소값을 구하는 함수입니다.

집계함수의 종류
종류 설명
count(필드명) 레코드의 개수를 표시(값이 null인 경우 포함하지 않음)
count(*) 레코드의 개수를 표시(값이 null인 경우 포함)
sum(필드명) 필드의 값을 합계로 표시
avg(필드명) 필드의 값을 평군으로 표시
max(필드명) 필드의 값 최대값 표시
min(필드명) 필드의 값 최소값 표시

CREATE TABLE schoolRecord (
studentID int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '학생 번호',
class tinyint unsigned comment '소속 클래스(반)',
english tinyint unsigned NOT NULL comment '영어 점수',
math tinyint unsigned NOT NULL comment '수학 점수',
science tinyint unsigned NOT NULL comment '과학 점수',
japanese tinyint unsigned NOT NULL comment '일본어 점수',
coding tinyint unsigned NOT NULL comment '코딩 점수',
PRIMARY KEY (studentID)
) CHARSET=utf8 comment='성적 정보';

INSERT INTO schoolRecord(english, math, science, japanese, coding) VALUES(67, 4, 20, 100, 100);
INSERT INTO schoolRecord(class, english, math, science, japanese, coding) VALUES(1, 55, 60, 80, 50, 100);
INSERT INTO schoolRecord(class, english, math, science, japanese, coding) VALUES(2, 100, 90, 100, 50, 100);
INSERT INTO schoolRecord(class, english, math, science, japanese, coding) VALUES(2, 90, 86, 100, 70, 100);
INSERT INTO schoolRecord(class, english, math, science, japanese, coding) VALUES(3, 80, 50, 60, 20, 100);
INSERT INTO schoolRecord(class, english, math, science, japanese, coding) VALUES(3, 100, 80, 70, 20, 80);
INSERT INTO schoolRecord(class, english, math, science, japanese, coding) VALUES(4, 100, 100, 100, 30, 40);

레코드 개수 구하기


SELECT count(class) FROM schoolRecord;


SELECT count(*) FROM schoolRecord;

모든 학생의 영어 점수 합계


SELECT sum(english) FROM schoolRecord;

1번부터 5번까지의 학생 수학 점수 평균값


SELECT avg(math) FROM schoolRecord WHERE studentID >=1 AND studentID <=5;

가장 높은 일본어 점수 구하기


SELECT max(japanese) FROM schoolRecord;

가장 낮은 수학 점수 구하기


SELECT min(math) FROM schoolRecord;

ORDER BY

SELECT 필드명 FROM 테이블명 ORDER BY 정렬 기준이 될 필드명 DESC(내림차순) 또는 ASC(오름차순)
학생들의 영어 점수를 높은 순에서 낮은 순으로 표시

SELECT studentID, english FROM schoolRecord ORDER BY english DESC;

학생들의 영어 점수를 낮은 순에서 높은 순으로 표시

SELECT studentID, english FROM schoolRecord ORDER BY english ASC;

LIMIT

SELECT 필드명 FROM 테이블명 LIMIT 불러올 수
출력할 레코드 개수 설정

SELECT * FROM myMember LIMIT 4;

SELECT 필드명 FROM 테이블명 LIMIT 불러올 레코드 순번, 불러올 개수 한페이지당 4명의 회원수를 보여주고 다음페이지에서 4명을 출력할 때 SELECT * FROM myMember LIMIT 4; 두 번째 페이지에서 작동되는 쿼리문 SELECT * FROM myMember LIMIT 4,4; 세 번째 페이지에서 작동되는 쿼리문 SELECT * FROM myMember LIMIT 8,4;

Concat

SELECT concat(합칠 문자열 또는 필드, 합칠 문자열 또는 필드) FROM 테이블명;

SELECT concat(uname,'의 이메일 주소는 ',email,' 입니다.') FROM myMember;