#1. 데이터베이스 관리
1. 데이터베이스 생성/삭제
1) 데이터베이스 생성하기
CREATE DATABASE `데이터베이스이름` [DEFAULT CHARSET `utf8`];
- 기존에 존재하는 데이터베이스와 동일한 이름의 데이터베이스는 생성할 수 없다.
- 기본 CHARSET은 utf8, euckr 등의 값을 지정할 수 있다. (mysql에서는 utf-8이 아니고 utf8)
- 지정하지 않으면 기본값이 라틴어 계열로 된다.
- 테이터베이스 이름, 테이블 이름, 인코딩 이름, 별칭은 역따옴표를 붙여도 되고 안붙여도 된다. (띄어쓰기가 있을 시에는 붙여야 한다)
2) 데이터베이스 삭제하기
DROP DATABASE `데이터베이스이름`;
- 존재하지 않는 데이터베이스의 이름을 지정한 경우 에러가 발생한다.
- 삭제한 데이터베이스는 복구할 수 없기 때문에 신중히 수행해야 한다.
2. 테이블 생성하기
1) 테이블 생성
CREATE TABLE `테이블이름` (
`컬럼이름` 데이터타입 [NULL | NOT NULL] [AUTO_INCREMENT] [COMMENT '컬럼설명'],
`컬럼이름` 데이터타입 [NULL | NOT NULL] [AUTO_INCREMENT] [COMMENT '컬럼설명'],
`컬럼이름` 데이터타입 [NULL | NOT NULL] [AUTO_INCREMENT] [COMMENT '컬럼설명'],
[PRIMARY KEY (`기본키컬럼이름`)]
) [ENGINE=INNODB] [DEFAULT CHARSET=`utf8`] [COMMENT='테이블 설명']
- 괄호 안에 테이블이 포함할 컬럼의 이름과 데이터 타입들을 콤마로 구분하여 명시한다.
- ENGINE=InnoDB 는 Oracle이 MySQL을 인수한 후에 추가한 저장형식으로 참조키나 프로시저 등의 고급 기능을 사용할 수 있게 해준다.
- DEFAULT CHARSET=`utf8` 은 기본 문자열 저장 형식을 utf8로 설정한다.
- 데이터베이스 뿐만 아니라 테이블에도 지정해야한다.
- 테이블 이름이나 컬럼이름에는 역따옴표를 적용한다. (생략가능)
- 이름을 지정할 때는 일반적으로 테이블 이름은 ~~들 이라는 의미로 복수형(~s)으로 지정하고, 컬럼 이름은 개별적인 값이므로 단수형으로 지정한다.
- COMMENT는 홑따옴표를 적용한다.
2) 데이터 타입
구분 | 데이터 타입 | 설명 |
문자 문장형 |
CHAR(n) | 글자 수가 최대 n개인 고정 길이 문자열 저장 → 한글, 영문 구분 없이 한 글자로 취급한다. → 우편번호, 주민번호 등과 같이 글자수가 고정된 데이터에 사용된다. ex) char(10)이라 지정된 컬럼의 경우, → "mysql'이라 저장하면 모자란 5글자는 공백처리 되어 "mysql " 이라 저장된다 초과되는 글자의 경우 초과된 글자는 저장되지 않는다. |
VARCHAR(n) | 글자 수가 최대 n개인 가변 길이 문자열 저장 → 아이디, 이메일 주소, 비밀번호, 글 제목 등 글자수가 불규칙 적인 데이터에 사용 |
|
TEXT | 최대 65535 길이의 문자열을 저장한다. ex) 게시판의 본문 등. |
|
숫자형 | TINYINT SMALLINT INT(기본) BIGINT |
정수 형태의 데이터를 저장한다. (TINYINT < SMALLINT < INT < BIGINT) |
FLOAT(m,n) | 실수 형태의 데이터를 저장한다. M은 전체 자리수 (소수점도 자리수에 포함됨), n은 소수점 이하의 자리수 |
|
날짜형 | DATE | 날짜 형식의 데이터를 저장한다. (YYYY-MM-DD) |
DATETIME | 날짜 + 시간 형식의 데이터를 저장한다. (YYYY-MM-DD HH:MI:SS) | |
기타 | BLOB | 최대 65535 길이의 바이너리를 저장한다. (게시판 본문 등에 사용) UTF8 환경에서 TEXT보다 권장. |
ENUM('A','B','C'...'Z') | 저장 가능한 값을 A, B, C ... Z로 제한한다. ex) 성별 → ENUM('F', 'M') 메일링 가입 →ENUM('Y', 'N') |
3) NULL 데이터
- 데이터 타입을 결정한 후에는 NULL 데이터의 허용 여부를 명시한다.
- NULL: NULL 데이터 허용, 일반적으로 미필수 입력 항목에 사용한다.
- NOT NULL: NULL 데이터 허용 안함, 필수 입력 항목에 사용한다.
4) 기본키 (Primary Key) 지정 방법
- 컬럼을 나열할 때 primary key 라고 명시한다.
CREATE TABLE `테이블이름` (
`column1` int NOT NULL primary key COMMENT '컬럼설명',
`column2` 데이터타입 [NULL | NOT NULL] [AUTO_INCREMENT] [COMMENT '컬럼설명'],
) [ENGINE=INNODB] [DEFAULT CHARSET=`utf8` [COMMENT='테이블 설명']
- 컬럼의 목록을 모두 나열한 후 primary key('컬럼이름')의 형식으로 명시한다.
CREATE TABLE `테이블이름` (
`column1` int NOT NULL COMMENT '컬럼설명',
`column2` 데이터타입 [NULL | NOT NULL] [AUTO_INCREMENT] [COMMENT '컬럼설명'],
PRIMARY KEY (`column1`)
) [ENGINE=INNODB] [DEFAULT CHARSET=`utf8` [COMMENT='테이블 설명']
5) 일련번호 설정 (자동증가)
- 각 데티어 행을 고유하게 구분하기 위해 설정하는 Primary Key가 INT형인 경우, AUTO_INCREMENT 옵션을 추가하면 데이터 INSERT 시에 자동으로 1씩 증가된 값이 저장된다.
CREATE TABLE `테이블이름` (
`column1` int NOT NULL primary key auto_increment COMMENT '컬럼설명',
`column2` 데이터타입 [NULL | NOT NULL] [AUTO_INCREMENT] [COMMENT '컬럼설명'],
) [ENGINE=INNODB] [DEFAULT CHARSET=`utf8` [COMMENT='테이블 설명']
CREATE TABLE `테이블이름` (
`column1` int NOT NULL auto_increment COMMENT '컬럼설명',
`column2` 데이터타입 [NULL | NOT NULL] [AUTO_INCREMENT] [COMMENT '컬럼설명'],
PRIMARY KEY (`column1`)
) [ENGINE=INNODB] [DEFAULT CHARSET=`utf8` [COMMENT='테이블 설명']
6) 예제
- id(int, pk, 자동증가), memo(varchar(255)), reg_date(datetime)의 컬럼을 갖는 테이블을 생성하시오
3. 테이블 삭제하기
DROP TABLE `테이블이름`;
- 존재하지 않는 테이블을 삭제할 경우 에러가 발생한다.
- 삭제된 테이블은 복구 할 수 없으므로, 주의가 필요하다.
4. 테이블 수정하기
1) 테이블의 구조 변경하기
ALTER TABLE `테이블이름` 명령어;
※ 명령어의 종류
명령어 | 설명 |
rename | 테이블의 이름을 변경한다. |
add | 컬럼이나 제약조건을 추가한다. |
change | 컬럼을 수정한다. |
drop | 컬럼이나 제약조건을 삭제한다. |
2) 예제
- mytable의 이름을 example로 변경
- datatime 형식의 edit_date 컬럼을 NOT NULL로 추가
- ADD 명령어와 AFTER 옵션을 사용하여 특정 컬럼 뒤에 새로운 컬럼 추가
- memo 컬럼의 컬럼명을 comment로, 데이터 타입은 text로 수정하고 NULL값을 허용하게 하시오.
- writer 컬럼의 이름을 유지한 상태에서 데이터 타입과 NULL을 허용 안함으로 변경하시오.
- edit_date 컬럼을 삭제하시오
- id 컬럼의 기본키 속성 해제하기
- 일련번호 체계를 리셋하고자 할 때 사용
- id 컬럼에 기본키를 설정하고, AUTO_INCREMENT 속성을 추가하시오
4. 참조키 설정하기
1) 참조키란?
- 테이블 A의 컬럼 a에 저장될 데이터가 반드시 테이블 B에 저장되어 있는 값 중의 하나여야할 경우, 테이블 A는 테이블 B를 참조한다 라고 한다.
- 즉, 컬럼 a를 테이블 B에 대한 참조키(외래기, Foreign Key)라고 한다.
2) 도형으로 참조 관계 표현
- 테이블 A의 Primary Key를 테이블 B의 Primary Key가 참조하는 경우, 각 테이블에 고유하게 존재하는 값 끼리 참조하므로 1:1 관계가 성립된다.
- 테이블 A의 Primary Key를 테이블 B의 일반 컬럼이 참조하는 경우, 하나의 A를 하나 이상의 B가 참조하는 1:N 관계가 성립된다.
- 게시판, 장바구니 등등
3) 참조키 설정하기
CREATE TABLE `테이블이름` (
`컬럼이름` 데이터타입 [NULL | NOT NULL] [AUTO_INCREMENT] [COMMENT '컬럼설명'],
`컬럼이름` 데이터타입 [NULL | NOT NULL] [AUTO_INCREMENT] [COMMENT '컬럼설명'],
`컬럼이름` 데이터타입 [NULL | NOT NULL] [AUTO_INCREMENT] [COMMENT '컬럼설명'],
[PRIMARY KEY (`기본키컬럼이름`)]
[FOREIGN KEY (`참조키컬럼이름`)]
) [ENGINE=INNODB] [DEFAULT CHARSET=`utf8`] [COMMENT='테이블 설명']
- 참조키 설정시 다음의 제약조건이 생성된다 (참조 무결성의 제약조건)
- 다른 테이블의 참조를 받고 있는 데이터는 참조하고 있는 데이터가 삭제되기 전 까지는 먼저 삭제될 수 없다.
- 다른 테이블의 데이터를 참조하는 컬럼은 해당 컬럼의 데이터 중 하나를 저장해야만 한다.
4) 예제
- 학생 테이블의 studno 컬럼을 참조하는 성적 테이블 만들기
5. 참조관계에서 제약조건 확인하기
1) INSERT 제약조건
- grade 테이블의 studno 컬럼은 student 테이블의 studno를 참조하기 때문에 student 테이블에 저장되어 있지 않은 값은 INSERT 할 수 없다.
2) DELETE 제약조건
- 다른 테이블의 참조를 받고 있는 데이터는 자신을 참조하는 대상이 삭제되기 전에는 먼저 삭제될 수 없다.
6. 데이터베이스 백업 / 복구
- MySQL의 백업과 복구는 터미널(명령프롬프트)에서 MySQL의 실행파일이 위치하는 경로로 이동한 후에 수행해야 한다.
1) 데이터베이스 백업
mysqldump -u계정아이디 -p 벡업할DB이름 > 백업파일경로
- 이 명령어는 MySQL 접속 상태가 아닌 일반 터미널(명령프롬프트) 상태에서 실행해야 한다.
- 비밀번호는 mysql 접속 시 사용하는 비밀번호를 입력하면 된다.
2) 데이터베이스 복구
mysql -u계정아이디 -p 복구할DB이름 < 백업파일경로
- MySQL에 접속한 상태에서 백업한 DB를 복구하기 위한 새로운 데이터베이스를 생성한다.
- MySQL 접속을 해제한 상태의 터미널(명령프롬프트)에서 복구를 진행한다.
- MySQL에 접속 후 데이터베이스가 정상적으로 복구된 것을 볼 수 있다.
'국비수업 > MySQL' 카테고리의 다른 글
[MySQL] ERD (0) | 2022.06.22 |
---|---|
[MySQL] 입력, 수정, 삭제 (0) | 2022.06.13 |
[MySQL] 서브쿼리 (0) | 2022.06.13 |
[MySQL] 그룹 조회 / 조인(JOIN) (0) | 2022.06.10 |
[MySQL] SQL함수 (0) | 2022.06.09 |