레퍼런스 : 생활코딩 MySQL
목표 : MySQL 의 작동 방법 및 쿼리문 문법 습득
데이터를 구조화 하여 정렬한 것
데이터를 구조화 하면 정렬(sort), 탐색(search)에 유리
쿼리문 예시
INSERT INFO FAVORITE VALUES('꿈', '조용필', '4:47', 'The Dream');
관계형 데이터베이스
nosql
- mongodb
- http://nosql-database.org/
데이터 베이스의 종류에는 관계형 데이터베이스와 noSQL으로 나뉜다.
여기서 mysql은 관계형 데이터 베이스이다.
여기서 nosql은 관계형 데이터 베이스에서 처리 불가능한 데이터 (예: 페이스북, 인스타 같은 곳에서 사용되는 데이터)를 처리하기 위해 나온 방식이다.
테이블 → 데이터베이스 → 데이터베이스 서버
≠ 여기서 데이터베이스는 데이터베이스 시스템과 다름
테이블에는 로우와 컬럼이 있고,
컬럼은 데이터 타입이,
로우에는 데이터 그룹이 위치하며,
구체적인 데이터를 레코드 라고 하며,
각각의 교차점에 있는걸 필드 라고 한다.
쿼리문 예시
mysql -uroot -p
// 로그인
show databases
//database list 보여줌
use music
// 뮤직이라는 테이블로 접근 -> 데이타 베이스 바뀜
show tables
// 뮤직이라는 테이블 안에 내용을 보여줌
select * from favorite_music
// 테이블 안 내용을 행과 열로 보여줌
클라이언트 목록
## **mysql-monitor**
mysql -u아이디 -p비밀번호
## **mysql query browser**
[http://dev.mysql.com/downloads/gui-tools/5.0.html](http://dev.mysql.com/downloads/gui-tools/5.0.html)
## **phpMyAdmin**
[http://www.phpmyadmin.net/home_page/index.php](http://www.phpmyadmin.net/home_page/index.php)
## **올챙이**
[https://sites.google.com/site/tadpolefordb/](https://sites.google.com/site/tadpolefordb/)
## **TOAD**
[http://www.quest.com/toad-for-mysql/](http://www.quest.com/toad-for-mysql/) (무료)
## **navicat**
[http://www.navicat.com/](http://www.navicat.com/) (유료)
그 중 저는 mysql monitor 가 필요해서 이 프로그램만 공부했습니다.
`mysql **-u**아이디 **-p**비밀번호`
`mysql **-h**호스트주소 **-p**포트번호 **-u**아이디 **-p**비밀번호`
**CREATE** **DATABASE** music **CHARACTER** **SET** utf8 **COLLATE** utf8_general_ci;
use music;
**`CREATE`** **`TABLE`** ``favorite_music` (`
``title` **varchar**(255) NOT` `NULL,`
``musician` **varchar**(20) NOT` `NULL,`
``duration` **varchar**(20) NOT` `NULL,`
``album` **varchar**(30) NOT` `NULL`
`) ENGINE=innodb;`
**insert** **into** favorite_music (`title`,`musician`, `duration`, `album`) **values**('Chasing Pavements', '아델', '3:30', 19);
**select** * **from** favorite_music;
mysql> exit;
cheatsheet (헷갈리거나 잊어버리기 쉬운 명령어들 모음)
CREATE DATABASE `데이터베이스명` CHARACTER SET utf8 COLLATE utf8_general_ci;
DROP DATABASE `데이터베이스명`;
SHOW DATABASES;
USE `데이터베이스명`
// 쉘에서 cd 를 이용해 폴더 안으로 들어가는것과 같음
Databaes 가 폴더라면 Table은 파일
테이블에 적재될 데이터의 구조와 형식을 정의하는것
CREATE TABLE table_name (
칼럼명1 data_type,
칼럼명2 data_type
)
CREATE TABLE `student` (
`id` tinyint NOT NULL ,
`name` char(4) NOT NULL ,
`sex` enum('남자','여자'),
`address` varchar(50) NOT NULL ,
`birthday` datetime,
PRIMARY KEY (`id`)
);
insert into student values (1, "asdas", "skawk", "asdsad", "asdsad");
SHOW tables;
DESC `테이블명`
DROP TABLE `테이블명`
SELECT column1, column2, ... from table_name;
SELECT * from table_name where id = 1;
예제
SELECT * FROM student where name = "younghee";
SELECT student.name, grade.grade FROM student, grade where student.id = grade.student_id;
INSERT INTO table_name VALUES (value1, value2, value3,...)
INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)
예제
INSERT INTO `student` VALUES ('2', 'leezche', '여자', '서울', '2000-10-26');
INSERT INTO `student` (`id`, `name`, `sex`, `address`, `birthday`) VALUES ('1', 'egoing', '남자', 'seoul', '2000-11-16');
UPDATE 테이블명 SET 컬럼1=컬럼1의 값, 컬럼2=컬럼2의 값 WHERE 대상이 될 컬럼명=컬럼의 값
예제
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` tinyint(4) NOT NULL,
`name` char(4) NOT NULL,
`sex` enum('남자','여자') NOT NULL,
`address` varchar(50) NOT NULL,
`birthday` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `student` VALUES (1, '이숙경', '여자', '청주', '1982-11-16 00:00:00');
INSERT INTO `student` VALUES (2, '박재숙', '남자', '서울', '1985-10-26 00:00:00');
INSERT INTO `student` VALUES (3, '백태호', '남자', '경주', '1989-2-10 00:00:00');
INSERT INTO `student` VALUES (4, '김경훈', '남자', '제천', '1979-11-4 00:00:00');
INSERT INTO `student` VALUES (8, '김정인', '남자', '대전', '1990-10-1 00:00:00');
INSERT INTO `student` VALUES (6, '김경진', '여자', '제주', '1985-1-1 00:00:00');
INSERT INTO `student` VALUES (7, '박경호', '남자', '영동', '1981-2-3 00:00:00');
UPDATE `student` SET address='서울';
UPDATE `student` SET name='이진경' WHERE id=1;
UPDATE `student` SET name='이고잉', birthday='2001-4-1' WHERE id=3;
테이블 스키마를 변경
DELETE FROM 테이블명 [WHERE 삭제하려는 칼럼 명=값]
예제
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` tinyint(4) NOT NULL,
`name` char(4) NOT NULL,
`sex` enum('남자','여자') NOT NULL,
`address` varchar(50) NOT NULL,
`birthday` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `student` VALUES (1, '이숙경', '여자', '청주', '1982-11-16 00:00:00');
INSERT INTO `student` VALUES (2, '박재숙', '남자', '서울', '1985-10-26 00:00:00');
INSERT INTO `student` VALUES (3, '백태호', '남자', '경주', '1989-2-10 00:00:00');
INSERT INTO `student` VALUES (4, '김경훈', '남자', '제천', '1979-11-4 00:00:00');
INSERT INTO `student` VALUES (8, '김정인', '남자', '대전', '1990-10-1 00:00:00');
INSERT INTO `student` VALUES (6, '김경진', '여자', '제주', '1985-1-1 00:00:00');
INSERT INTO `student` VALUES (7, '박경호', '남자', '영동', '1981-2-3 00:00:00');
DELETE FROM student WHERE id = 2;
테이블을 삭제한다.
DROP TABLE 테이블명;
SELECT 칼럼명1, 칼럼명2
[FROM 테이블명 ]
[GROUP BY 칼럼명]
[ORDER BY 칼럼명 [ASC | DESC]]
[LIMIT offset, 조회 할 행의 수]
예제
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` tinyint(4) NOT NULL,
`name` char(4) NOT NULL,
`sex` enum('남자','여자') NOT NULL,
`address` varchar(50) NOT NULL,
`birthday` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `student` VALUES (2, '박재숙', '남자', '서울', '1985-10-26 00:00:00');
INSERT INTO `student` VALUES (1, '이숙경', '여자', '청주', '1982-11-16 00:00:00');
INSERT INTO `student` VALUES (3, '백태호', '남자', '경주', '1989-2-10 00:00:00');
INSERT INTO `student` VALUES (4, '김경훈', '남자', '제천', '1979-11-4 00:00:00');
INSERT INTO `student` VALUES (8, '김정인', '남자', '대전', '1990-10-1 00:00:00');
INSERT INTO `student` VALUES (6, '김경진', '여자', '제주', '1985-1-1 00:00:00');
INSERT INTO `student` VALUES (7, '박경호', '남자', '영동', '1981-2-3 00:00:00');
SELECT * FROM student;
SELECT name, birthday FROM student;
SELECT * FROM student WHERE id=3;
SELECT * FROM student WHERE sex='남자' AND address='서울';
SELECT * FROM student WHERE sex='여자' OR address='서울';
SELECT * FROM student LIMIT 1;
SELECT * FROM student LIMIT 1,1;
SELECT * FROM student LIMIT 2,1;
SELECT * FROM student LIMIT 3,1;
SELECT * FROM student WHERE sex='남자' LIMIT 2;
테이블 단위에서 데이터의 무결성을 보장하는 규칙
데이터, 테이블 수정 작업의 경우 잘못된 트랜젝션 수행을 방지하는 역할
테이블 간 제약조건이 있어서 종속성이 있는 경우 테이블 삭제 방지
주 식별자키로 테이블의 모든 데이터를 식별하는 컬럼
중복 불가, NULL 불가
함수적 종속 관계
테이블 생성시 단 한개의 PK 설정
고유 인덱스 자동 생성
PK 지정 가능한 컬럼이 여러 개 있을 경우, 많이 사용되고 간단한 컬럼 선택
외부 식별자키로 테이블 간의 관계 의미
두 테이블 간의 종속이 필요한 관계이면 그 접점이 되는 칼럼을 FK로 지정하여 서로 참조할수 있도록 관계를 맺어준다.
테이블간 잘못된 매핑을 방지하는 역할
FK 선언한 테이블이 하위 테이블이다.
참조하는 테이블은 부모 테이블이다.
상위 테이블, 참조할 컬럼이 존재 필요
참조가 되면 해당 상위 테이블과 데이터 삭제/변경 불가
삭제 가능한 경우 : 참조되는 상위 테이블 행에 대한 delete 허용 (상위, 하위 같이 삭제)
참조하는 컬럼 데이터 타입(자료형) 일치
참조되는 컬럼은 PK, UK만 가능
고유키
중복된 값을 허용하지만 여러개 NULL 값은 허용
고유 인덱스 자동 생성
테이블 레벨 정의 불가(컬럼 정의 시 끝에 NOT NULL 조건 추가)
지정된 컬럼은 NULL 값 입력 불가
가능한 모든 컬럼에 NULL 허용하지 않게 NOT NULL 설정하는게 좋음
행에 입력될 데이터의 조건을 정의
조건은 where 절 기술하는 조건 형식과 동일
해당 컬럼에 대해서 데이터가 insert 될 때 조건과 틀리게 insert 되면 ORA-02290 체크조건 오류가 발생된다.