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

표준 데이터베이스 질의 언어인 구조화 질의 언어(SQL: Structured Query Language)를 사용하는 공개 소스의 관계형 데이터베이스 관리 시스템(RDBMS). 매우 빠르고, 유연하며, 사용하기 쉬운 특징이 있다. 다중 사용자, 다중 스레드(thread)를 지원하고, C, C++, 에펠(Eiffel), 자바, 펄, PHP, 파이선(Python) 스크립트 등을 위한 응용 프로그램 인터페이스(API)를 제공한다. 유닉스나 리눅스, 윈도우 운영 체제 등에서 사용할 수 있다. 램프(LAMP), 즉 리눅스 운영 체계와 아파치(Apache) 서버 프로그램, MySQL, PHP 스크립트 언어 구성은 상호 연동이 잘되면서도 공개 소스(오픈 소스)로 개발되는 무료 프로그램이어서 홈 페이지나 쇼핑몰 등 일반적인 웹 개발에 널리 이용되고 있다.

MAMP 설치 https://www.mamp.info

데이터베이스 생성
create database 데이터베이스 이름;
데이터베이스 보기
show databases;
데이터베이스 선택
use 데이터베이스 이름;
데이터베이스 삭제
drop database 데이터베이스 이름; 삭제시에는 s를 붙이면 안된다.

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

숫자형 데이터
데이터형 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 테이블명(
필드명 데이터형 필드 설명
)인코딩 설정 테이블 설명
테이블 보기
desc 테이블명
테이블 삭제
drop table 테이블명
필드 추가하기
ALTER TABLE 테이블명 ADD 추가할 필드명 옵션 코멘트 위치

ALTER TABLE testTable ADD gender enum('m','w','x') default 'x' comment '고객성별 - m남성 w여성 x는 선택안함' AFTER birthDay;

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

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

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

INSERT INTO myMember
INSERT INTO myMember (name, phone) VALUES('이름','010-1234-1234') ex INSERT INTO myMember(userId, name, password, phone, email, birthDay, gender, regTime)
VALUES('haeyun', '이지형', 'dlwlgud85', '010-1234-5678', 'tigger@everdevel.com', '1985-11-18', 'm', now());
INSERT INTO myMember(userId, name, password, phone, email, birthDay, gender, regTime)
VALUES('nelly', '전윤동', 'wjsdbsehd83', '010-1234-5678', 'nelly@everdevel.com', '1983-04-27', 'm', now());
INSERT INTO myMember(userId, name, password, phone, email, birthDay, gender, regTime)
VALUES('cooper', '노진우', 'shwlsdn87', '010-1234-5678', 'cooper@everdevel.com', '1987-02-01', 'm', now());

데이터 불러오기
SELECT 필드명 FROM 테이블명;

SELECT name, userID FROM myMember; / mymember에 있는 아이디만 불러오기
SELECT * FROM mymember;

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

회원 아이디가 1번 정보를 검색 SELECT * FROM mymember WHERE myMemberID = 1;
메일 주소에 everdevel 텍스트가 있는 정보를 검색 SELECT * FROM myMember WHERE email LIKE '%everdevel%';
SELECT * FROM myMember WHERE email LIKE 'everdevel%';
SELECT * FROM myMember WHERE email LIKE '%everdevel';
SELECT * FROM myMember WHERE myMemberID >= 1 AND myMemberID <=3; / 아이디를 1번부터 3번까지 불러오기
이름 중에 '김'으로 시작하는 정보를 검색
이름 중에 '이'으로 시작하는 정보를 검색
이름 중에 '이'또는 '김'으로 시작하는 정보를 검색 SELECT * FROM myMember WHERE name LIKE '김%' OR name LIKE '이%';

데이터 변경하기
UPDATE 테이블명 SET 필드명 값 조건

회원 아이디 5의 핸드폰 번호를 0으로 변경
UPDATE myMember SET phone = 0 WHERE myMemberID = 5;
회원 아이디5의 핸드폰 번호를 010-1223-1123으로 변경, 아이디 변경
UPDATE myMember SET phone = '010-1223-1234', userID = 'chaelin' WHERE myMemberID = 5;
모든 데이터를 일괄 변경
UPDATE myMember SET phone = 0;

데이터 삭제하기
DELETE FROM 테이블명 조건

회원 아이디 5번을 삭제; DELETE FROM myMember WHERE myMemberID = 5; 회원아이디 1번부터 3번까지 삭제; DELETE FROM myMember WHERE myMemberID IN(1,2,3);

테이블 초기화
TRUNCATE 테이블 명;

TRUNCATE myMember;

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

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

필드명을 변경하여 표시하는 방법
SELECT 필드명 AS 기존 필드명 대신 출력할 필드명 FROM 테이블명

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

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

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

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

집계함수의 종류
종류 설명
count(필드명) 레코드의 개수를 표시(값이 null인 경우 포함하지 않음)
count(*) 레코드의 개수를 표시(값이 null인 경우 포함)
sum(필드명) 필드의 값을 합계로 표시
avg(필드명) 필드의 값을 평군으로 표시
max(필드명) 필드의 값 최대값 표시
min(필드명) 필드의 값 최소값 표시
레코드 갯수 구하기
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;
GROUP BY
SELECT 필드명 FROM 테이블명 GROUP BY 필드명

각 반별로 학생들의 영어 점수 평균 값 구하기
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;
수학 점수가 150점 이상인 학생 구하기
SELECT class, sum(math) FROM schoolRecord WHERE class IN(1,2,3,4) GROUP BY class HAVING sum(math) >= 150;

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;