본문 바로가기

기타/데이터베이스

[데이터베이스] MySQL 사용법

728x90
반응형

1. 서버 관리

1.1 서버 시작

 

service mysql start

 

 

1.2 서버 중지

 

service mysql stop

 

 

1.3 서버 재시작

 

service mysql restart

 

 

1.4 서버 상태 확인

 

service mysql status

 

2. 로그인

 

mysql -u 사용자아이디 -p 패스워드

 

 

3. 데이터베이스

3.1 데이터베이스 생성

 

CREATE DATABASE 데이터베이스명 CHARACTER SET utf8 COLLATE utf8_general_ci;

 

 

3.2 데이터베이스 보기

 

SHOW DATABASES;

 

 

3.3 데이터베이스 선택

 

USE 데이터베이스명;

 

 

3.4 데이터베이스 삭제

 

DROP DATABASE 데이터베이스명;

 

 

4. 테이블

4.1. 테이블 생성

 

CREATE TABLE 테이블명 (컬럼명1 데이터타입1컬럼명2 데이터타입2...); 

 

CREATE TABLE 'table1' ( 
    'id'  tinyint NOT NULL , 
    'name'  char(16) NOT NULL , 
    'sex'  enum('남자','여자') NOT NULL ,     
    'score' INT NOT NULL, 
    'test_date'  datetime NOT NULL , 
    PRIMARY KEY (`id`) 
); 

 

 

4.1.1 데이터 타입

 

 (1) 문자형 데이터타입

 

데이터 유형

정의

길이(byte)

CHAR(길이)

고정 길이 데이터 타입.
데이터가 지정된 길이보다 짧으면 공백으로 채움.
검색시, PAD_CHAR_TO_FULL_LENGTH 모드를 설정하지 않으면 공백은 제거됨

0 ~ 255

VARCHAR(길이)

가변 길이 데이터 타입.
데이터가 지정된 길이보다 으면 공백으로 채우지 않음.

0 ~ 65,535

TINYTEXT(길이)

문자열 데이터 타입

0 ~ 255

TEXT(길이)

문자열 데이터 타입

0 ~ 65,535

MEDIUMTEXT(길이)

문자열 데이터 타입

0 ~ 16,777,215

LONGTEXT(길이)

문자열 데이터 타입

0 ~ 4,294,967,295

 

 

 (2) 숫자형 데이터 타입

 

데이터 유형

정의

크기(byte)

범위

UNSIGNED

TINYINT(길이)

정수형 데이터 타입.

1

-128 ~ 127,
0 ~ 255

O

SMALLINT(길이)

정수형 데이터 타입.

2

-32768 ~ 32767,
0 ~ 65536

O

MEDIUMINT(길이)

정수형 데이터 타입.

3

-8388608 ~ 8388607,
0 ~ 16777215

O

INT(길이)

정수형 데이터 타입.

4

-2147483648 ~ 2147483647,
0 ~ 4294967295

O

BIGINT(길이)

정수형 데이터 타입.

8

무제한

O

FLOAT(길이소수)

부동 소수형 데이터 타입.
고정 소수점

4

 

X

DECIMAL(길이소수)

고정 소수형 데이터 타입 고정.
소수점 형태.

길이+1byte

 

X

DOUBLE(길이소수)

부동 소수형 데이터 타입.

8

 

X

 

 

 (3) 날짜형 데이터 타입

 

타입

정의

길이
(byte)

형식

범위

DATE

날짜(년도형태의 기간 표현 데이터

3

0000-00-000
(YYYY-MM-DD)

1000-01-01 ~ 9999-12-31

TIME

시간(형태의 기간 표현 데이터

3

0:00:00

.

DATETIME

날짜와 시간 형태의 기간 표현 데이터

8

0000-00-00 00:00:00
(YYYY-MM-DD hh:mm:ss)

1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999

TIMESTAMP

날짜와 시간 형태의 기간 표현 데이터.
타입 시스템 변경  자동으로  날짜와 시간이 저장.

4

Integer

.

YEAR

년도 표현 데이터 타입

1

0

 

 

 

 (4) 이진 데이터 타입

 

타입

정의

최대 길이(byte)

BINARY(길이) & BYTE(길이)

CHAR 형태의 이진 데이터 타입

255

VARBINARY(길이)

VARCHAR 형태의 이진 데이터 타입

65,535

TINYBLOB(길이)

이진 데이터 타입

255

BLOB(길이)

이진 데이터 타입

65,535

MEDIUMBLOB(길이)

이진 데이터 타입

16,777,215

LONGBLOB(길이)

이진 데이터 타입

4,294,967,295

 

 

(5) ENUM 타입

 

타입

정의

최대 개별 수

ENUM('값1','값2',...)

열거형정해진 몇가지의 값들 중 하나만 저장.

65,535

 

 

(6) SET 타입

 

타입

정의

최대 개별 수

SET('값1','값2',...)

집합형정해진 몇가지의 값들 중 여러 개를 저장.
내부적으로는 정수.

64

 

4.1.2 제약조건

 

(1) 제약 조건 종류

 

  • NOT NULL : 필드의 데이터 값이 NULL이면 안됨.
  • UNIQUE : 필드의 데이터 값이 유일해야 함.
  • PRIMARY KEY : 기본키. pk를 사용해도 됨. 제약조건 NOT NULL + UNIQUE.
  • FOREIGN KEY : 외래키. 하나의 테이블이 다른 테이블에 의존함.
  • CHECK : 주어진 조건에 해당하는 값만 입력 가능.
  • DEFAULT : 해당 필드의 데이터 값이 기본값으로 설정함.
  • AUTO_INCREMENT : 테이블에 값이 1부터 자동으로 값이 증가함.

(2) 제약 조건 확인

 

SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

 

 

(3) 제약 조건 추가(PRIMARY KEY) 

 

 ALTER TABLE 테이블명 ADD CONSTRAINT PRIMARY KEY (컬럼명);

 

 

(4) 제약 조건 추가(FOREIGN KEY) 

 

ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건 FOREIGN KEY (컬럼명) REFERENCES 부모테이블명 (PK컬럼명) ON DELETE CASCADE / ON UPDATE CASCADE; 

 

 

(5) 제약 조건 추가(NOT NULL) 

 

ALTER TABLE 테이블명 MODIFY 컬럼명 자료형 CONSTRAINT 제약조건 NOT NULL; 

 

 

(6) 제약조건 삭제

 

ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건;

 

 

(7) 제약 조건 추가(NOT NULL) 

 

ALTER TABLE 테이블명 FOREIGN KEY 제약조건;

 

 

(8) AUTO_INCREMENT 초기화

 

 단순히 원하는 값으로 초기화

 

ALTER TABLE 테이블명 AUTO_INCREMENT=1;

 

 

기존의 컬럼 재정렬 

 

ALTER TABLE 테이블명 AUTO_INCREMENT=1; 
SET @COUNT = 0; 
UPDATE 테이블명 SET 테이블명.컬럼명 = @COUNT:=@COUNT+1;

 


4.2 테이블 보기

 

show tables;

 


4.3 테이블 구조 보기

 

Desc 테이블명; 

 

5. CRUD(Create, Read, Update, Delete)

 

이름

내용

SQL

Create

생성

INSERT

Read

읽기

SELECT

Update

갱신

UPDATE

Delete

삭제

DELETE

 

5.1  생성(INSERT)

 

 (1) 컬럼명과 값을 모두 선언

 

INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...) VALUE (값1, 값2 , ….);

INSERT INTO Avengers (ID, NAME, Age) VALUES ('1001', 'Tho',  1500);

 

 

 (2) 값이 자동 대입

 

INSERT INTO 테이블명 VALUES (값1, 값2, ...);

 

 

(3) 생략 가능한 컬럼값


 - NULL을 저장할 수 있는 컬럼
 - DEFAULT 제약 조건 컬럼
 - AUTO_INCREMENT 제약조건 컬럼 

 

 

(4) 중복 키 관리

 

 - INSERT IGNORE :  중복 키 에러가 발생했을 때 신규로 입력되는 레코드를 무시

 - REPLACE INTO …

 - INSERT INTO … ON DUPLICATE UPDATE :  중복 키 오류 발생 시 사용자가 원하는 값을 직접 설정

 

 

5.2 읽기(SELECT)

 

 (1) 모든 데이터 읽기

 

SELECT * FROM 테이블명;

 

 

 (2) 조건을 넣은 읽기

 

SELECT 컬럼명1, 컬럼명2 FROM 테이블명 WHERE 조건;

 

SELECT * FROM Avengers WHERE age > 30;

 

 

 (3) 레코수 제한을 두고 읽기

 

SELECT 컬럼명 FROM 테이블명 WHERE 조건 LIMIT 레코드수;

  

SELECT * FROM Avengers WHERE age > 30 LIMIT  10;

 

 

 (4) GROUP BY

 

SELECT * FROM 테이블명 GROUP BY 그룹컬럼명;

  

 

 (5) ORDER BY

 

SELECT * FROM 테이블명 ORDER BY 정렬될_컬럼 DESC_또는_ASC;

 

 

 (6) 중복 값 제거

 

SELECT DISTINCT 컬럼명 FROM 테이블명;

 

 

 (7) 별칭(Alias) 사용

 

 컬럼명 별칭

 

SELECT 컬럼명 AS 별칭 FROM 테이블명;

 

테이블명 별칭

 

SELECT 컬럼명 FROM 테이블명 AS 별칭;

 

 

5.3  갱신(Update)

 

UPDATE 테이블명 SET 컬럼명1=값1, 컬럼명2=값2, ... WHERE 조건;

 

 

5.4 삭제(DELETE)

 

DELETE FROM 테이블명 WHERE 컬럼명 = 값;

 

 

테이블 모든 값 삭제

 

DELETE FROM 테이블명;

 

 

6. 원격 접속 허용

6.1 모든 IP 접속 허용

 

(1) GRANT

 

GRANT ALL PRIVILEGES ON *.* TO '아이디'@'%' IDENTIFIED BY '패스워드';

 

 

(2) INSERT + GRANT + FLUSH

 

INSERT INTO mysql.user (host,user,password,ssl_cipher, x509_issuer, x509_subject) VALUES ('%','아이디',password('패스워드'),'','',''); 
GRANT ALL PRIVILEGES ON *.* TO '아이디'@'%'; 
FLUSH PRIVILEGES;



6.2 특정 IP 대역 허용

 

예: 123.456.xxx.xxx

 

(1) GRANT

 

GRANT ALL PRIVILEGES ON *.* TO '아이디'@'123.456.%' IDENTIFIED BY '패스워드';

 

 

(2) INSERT + GRANT + FLUSH

 

INSERT INTO mysql.user (host,user,password,ssl_cipher, x509_issuer, x509_subject) VALUES ('123.456.%','아이디',password('패스워드'),'','',''); 
GRANT ALL PRIVILEGES ON *.* TO '아이디'@'123.456.%'; 
FLUSH PRIVILEGES;

 


6.3 특정 IP 허용


예: 123.456.78.91 

 

(1) GRANT

 

GRANT ALL PRIVILEGES ON *.* TO '아이디'@'123.456.78.91' IDENTIFIED BY '패스워드';

 

 

(2) INSERT + GRANT + FLUSH

 

INSERT INTO mysql.user (host,user,password,ssl_cipher, x509_issuer, x509_subject) VALUES ('123.456.78.91','아이디',password('패스워드'),'','',''); 
GRANT ALL PRIVILEGES ON *.* TO '아이디'@'123.456.78.91'; 
FLUSH PRIVILEGES;

 


6.4 원래 상태로 복구 : 모든 IP를 허용한 경우

 

DELETE FROM mysql.user WHERE Host='%' AND User='아이디'; 
FLUSH PRIVILEGES;

 

7. 참고사이트

MySQL 한글매뉴얼 : http://www.mysqlkorea.com/ex/mysql_reference.html

MySQl Documentation : https://dev.mysql.com/doc/

728x90
반응형