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

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

윈도우에서 MySQL에 접속하기

  1. MAMP 설치
  2. 명령 프로토콜 실행
  3. 해당 폴더로 경로이동 \MAMP\bin\mysql\bin
  4. MySQL 접속 : mysql -uroot -proot

맥에서 MySQL에 접속하기

  1. MAMP 설치
  2. 명령 프로토콜 실행
  3. 해당 폴더로 경로이동 \Applications/mamp/Library/bin
  4. MySQL 접속 : mysql -uroot -p
  5. mac os 암호입력, mysql 암호 root입력

MySQL 데이터베이스 보기

show databases;

MySQL 데이터베이스 만들기

create database 디비이름;

MySQL 데이터베이스 선택하기

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 테이블명( 필드명 데이터형 필드 설명 )인코딩 설정 테이블 설명

테이블 목록 보기

show 테이블 명

테이블 보기

desc 테이블 명

테이블 삭제

drop 테이블 명

테이블 초기화하기

TRUNCATE 테이블 명

회원의 일련 번호
회원의 아이디
회원의 이름
회원의 비밀번호
회원의 휴대전화 번호
회원의 이메일 주소
회원의 생일
회원의 성별
회원의 가입시기


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 '고객 비밀번호',
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='고객 정보 테이블';
ALTER TABLE myMember ADD phone varchar(13) not null comment '고객휴대폰번호' AFTER upassword;

필드 추가하기

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

필드 삭제하기

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

필드 수정하기

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

테이블에 데이터를 입력하는 방법

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

아이디 : jeongahStory
이름 : 정아
패스워드 : forever
휴대전화 번호 : 010-2651-512- 이메일 : jeongah2651@gmail.com
생일 : 1992-04-27
성별 : 여성

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime)
VALUES('jeongahStory', '정아', 'forever', '010-2651-5129', 'jeongah2651@gmail.com', '1992-04-27', 'w', now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime)
VALUES('webstoryboy', '웹스', 'forever', '010-7112-2049', 'webstoryboy@naver.com', '1972-04-03', 'm', now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime)
VALUES('wldnjs7204', '손지원', 'winwonwith', '010-7339-7204', 'wldnjs7204@naver.com', '1994-10-27', 'w', now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime)
VALUES('leehye1204', '이혜인', 'leehyein','010-3297-1204','leehye1204@naver.com', '1992-12-04', 'w', now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime)
VALUES('drexqq', '이성희', 'asdf1', '010-3792-3530', '01037923530a@gmail.com', '1996-05-12', 'm', now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime)
VALUES('ghkim2571', '김지호', 'jihojiho', '010-4133-2571', 'ghkim2571@naver.com', '1996-10-10', 'w', now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime)
VALUES('insectfow', '김동현', 'dong1', '010-4764-4286', 'ehdgus441@naver.com', '1996-05-19', 'm', now());

INSERT INTO myMember(useID, uname, upassword, phone, email, birthDay, gender, regTime)
VALUES('kiy620', '강인영', 'inystardust', '010-4028-1870','kiy620@naver.com', '1997-06-20', 'w', now());

SELECT

SELECT 필드명 FROM 테이블명;

SELECT

SELECT 필드명 FROM 테이블명;

LIMIT

SELECT 필드명 FROM 테이블명 LIMIT 불러올 수;

LIMIT 값 2개를 적용하는 방법

SELECT 필드명 FROM 테이블명 LIMIT 불러올 순번, 불러올 개수;

SELECT uname, useID FROM myMember;
SELECT * FROM myMember;
SELECT * FROM myMember WHERE myMemberID = 1;
SELECT * FROM myMember WHERE email LIKE '%web%';
SELECT * FROM myMember WHERE email LIKE '%web';
SELECT * FROM myMember WHERE email LIKE 'web%';
SELECT * FROM myMember WHERE myMemberID >= 1 AND myMemberID <= 5;
SELECT * FROM myMember WHERE uname LIKE '김%' OR uname LiKE '이%';
SELECT * FROM myMember LIMIT 3; SELECT * FROM schoolRecord ORDER BY english DESC LIMIT 4; SELECT * FROM myMember LIMIT 3,3;







UPDATE

UPDATE 필드명 SET 필드명 값 조건;

UPDATE myMember SET phone = 0 WHERE myMemberID = 4;
UPDATE myMember SET phone = '010-4133-2571', useID = 'giho' WHERE myMemberID = 4;
UPDATE myMember SET phone = 0;
UPDATE myMember SET phone = 0+3;
DELETE FROM myMember WHERE myMemberID IN(2,3,4);

JOIN

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

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, '이 가방 비싸요', now());

INSERT INTO prodReview(myMemberID, content, regTime)
VALUES(7, '이 가방 환불이요~', now());

SELECT * FROM prodReview;

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

집계함수의 종류
종류 설명
content(필드명) 레코드의 개수를 표시(null인 경우는 포함하지 않음)
content(*) 레코드의 개수를 표시(null인 포함)
sum(필드명) 필드 값의 합계를 표시
avg(필드명) 필드 값의 평균을 표시
max(필드명) 필드 값의 최대값을 표시
min(필드명) 필드 값의 최소값을 표시
그룹별 집계

SELECT 필드명 FROM 테이블명 GROUP BY 필드명

ORDER BY

SELECT 필드명 FROM 테이블명 ORDER BY 정렬 기준이 될 필드명 DESC 또는 ASC;

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

create table schoolRecord(
studentID int(10) unsigned not null auto_increment comment '학생번호',
class tinyint unsigned comment '소속 클래스',
english tinyint unsigned comment '영어 점수',
math tinyint unsigned comment '수학 점수',
science tinyint unsigned comment '과학 점수',
japanese tinyint unsigned comment '일본어 점수',
coding tinyint unsigned 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;
SELECT avg(math) FROM schoolRecord WHERE studentID >= 1 AND studentID <= 5;
SELECT min(math) FROM schoolRecord;



SELECT class, avg(english) FROM schoolRecord WHERE class IN(1,2,3,4) GROUP BY class;
SELECT class, sum(math) FROM schoolRecord WHERE class IN(1,2,3,4) GROUP BY class HAVING sum(math) >= 150;



//개인별 영어점수를 오름차순, 내림차순으로 표시
SELECT studentID, english FROM schoolRecord ORDER BY english DESC;
SELECT studentID, english FROM schoolRecord ORDER BY english ASC;

//반별 수학 점수를 높은 순에서 낮은 순으로 표시
SELECT class, sum(math) FROM schoolRecord WHERE class IN(1,2,3,4) GROUP BY class ORDER BY sum(math) DESC;



JOIN은 일치하는 특정 필드를 기준으로 테이블과 테이블을 연결하고 UNION은 사용하려는 테이블들을 하나의 테이블인 것처럼 사용해주는 기능입니다.

UNION

(첫 번째 테이블) UNION (두번째 테이블)

(SELECT name, email FROM dropOutOld) UNION (SELECT name, email FROM dropOutNew);

//중복사용된 것도 같이 뽑아내기
(SELECT name, email FROM dropOutOld) UNION ALL (SELECT name, email FROM dropOutNew);

create table dropOutOld(
dropOutOldID int unsigned not null auto_increment comment '예전 탈퇴회원 번호',
name varchar(10) not null comment '탈퇴 회원 이름',
email varchar(30) not null comment '탈퇴 회원 이메일',
primary key(dropOutOldID))
charset=utf8 comment '2016년 탈퇴 회원';

create table dropOutOld(
dropOutOldID int unsigned not null auto_increment comment '예전 탈퇴회원 번호',
name varchar(10) not null comment '탈퇴 회원 이름',
email varchar(30) not null comment '탈퇴 회원 이메일',
primary key(dropOutOldID))
charset=utf8 comment '2016년 탈퇴 회원';

INSERT INTO dropOutOld(name,email) VALUES('김태영', 'ever@everdevel.com');
INSERT INTO dropOutOld(name,email) VALUES('김태헌', 'jake@everdevel.com');
INSERT INTO dropOutOld(name,email) VALUES('이지형', 'tigger@everdevel.com');
INSERT INTO dropOutOld(name,email) VALUES('전윤동', 'nelly@everdevel.com');
INSERT INTO dropOutOld(name,email) VALUES('노진우', 'cooper@everdevel.com');
INSERT INTO dropOutOld(name,email) VALUES('최기욱', 'btm@everdevel.com');
INSERT INTO dropOutNew(name,email) VALUES('최기욱', 'btm@everdevel.com');
INSERT INTO dropOutNew(name,email) VALUES('한정은', 'hanje@everdevel.com');
INSERT INTO dropOutNew(name,email) VALUES('이정미', 'stella@everdevel.com');
select * from dropOutNew;

select * from dropOutOld;