본문 바로가기
🖥Web/🔥DB & SQL

[SQL]MySql - 2 고급

by 후누스 토르발즈 2020. 1. 5.
반응형
반응형

 

MySql

 

CREATE TABLE city2 AS SELECT * FROM city; = city2라는 데이터를 만들어줘 SELECT * FROM city로 

SELECT * FROM city2; = 모든 정보를 보여줘 city2로부터

 

CREATA TABLE AS SELECT = city테이블과 똑같은 city2 테이블 생성

 

CREATE DATABASE suan

 

CREATE DATBASE = CREATE DATABASE 문은 새로운 데이터베이스를 생성

USE suan = USE문으로 새 데이터베이스를 사용

 

 

GUI로 만드는 방법은 해당데이터베이스의 Tables 오른쪽버튼 Create Table

 

CREATE TABLE test2 (
id INT NOT NULL PRIMARY KEY,  = 고유의 키값부여, 인트이고 빈공간으로 둘 수 없다.
    col1 INT NULL,                      = 인트형으로 빈값
    col2 FLOAT NULL,                  = 플롯형으로 빈값
    col3 VARCHAR(45) NULL         = 바차형으로 빈값
);
SELECT * FROM test2;

 

ALTER TABLE문과 함께 ADD문을 사용하면, 테이블에 컬럼 타입을 추가할 수 있음

 

ALTER TABLE test2 = test2 테이블을 수정해줘
ADD col4 INT NULL; = 넣어줘 col4를 인트형 빈값으로

SELECT * FROM test2; 보여줘 test2 의 모든정보를

 

DESC test2; = 내림차순으로 보여줘

ALTER TABLE test2 = test2 테이블을 수정해줘
MODIFY col4 VARCHAR(20) NULL;  = 수정해줘 col4를 VARCHAR(20) 으로

 

DROP col4 = col4 삭제

 

Index(인덱스)

테이블에서 원하는 데이터를 빠르게 찾기 위해 사용

일반적으로 데이터를 검색할 때 순서대로 테이블 전체를 검색하므로 데이터가 많으면 많을수록 탐색하는 시간이 늘어남

검색과 질의를 할 때 테이블 전체를 읽지 않기 때문에 빠름

설정된 컬럼 값을 포함한 데이터의 삽입, 삭제, 수정 작업이 원본 테이블에서 이루어질 경우,인덱스도 함께 수정되어야함

인덱스가 있는 테이블은 처리속도가 느려질수있으므로 수정보다는 검색이 자주 사용되는 테이블에서 사용하는것이좋음

 

CREATE INDEX Col1Idx
ON test (col1)

CREATE INDEX 문을 사용하여 인덱스를 생성

 

SHOW INDEX FROM test;  = 인덱스 보여줘 test로부터

 

CREATE UNIQUE INDEX Col2Idx = 중복되지 않는 인덱스를 만들어줘 Col2ldx로
ON test (col2);
= test테이블에 col2를

SHOW INDEX FROM test;
= 인덱스를 보여줘 test로부터

Non_unique = 0 이면 중복되지 않는것

 

ALTER TABLE test = 수정해줘 test 테이블을
ADD FULLTEXT Col3Idx(col3); = 추가해줘 풀텍스트 Col3idx(col3)을

SHOW INDEX FROM test; = 인덱스 보여줘 test로부터

 

FULLTEXT INDEX는 일반적인 인덱스와는 달리 매우 빠르게 테이블의 모든 텍스트 컬럼을 검색

 

ALTER TABLE test = 수정해줘 test 테이블을
DROP INDEX Col3Idx; = 삭제해줘 인덱스 Col3Idx;를

 

ALTER 문을 사용하여 테이블에 추가된 인덱스 삭제

 

DROP INDEX Col2Idx ON test; = 삭제해줘 인덱스 Col2Idx 를 test 테이블의

ALTER 문을 사용하지않고 테이블에 추가된 인덱스 삭제

 

 

VIEW

뷰는 데이터베이스에 존재하는 일종의 가상 테이블

실제 테이블처럼 행과 열을 가지고 있지만, 실제로 데이터를 저장하진 않음

MySQL에서 뷰는 다른 테이블이나 다른뷰에 저장되어 있는 데이터를 보여주는 역할만 수행

뷰를 사용하면 여러 ㅔ이블이나 뷰를 하나의 테이블처럼 볼 수 있음

 

뷰의 장점

특정 사용자에게 테이블 전체가 아닌 필요한 컬럼만 보여줄 수 있음

복잡한 쿼리를 단순화해서 사용

쿼리 재사용 가능

 

뷰의 단점

한 번 정의된 뷰는 변경할 수 없음

삽입, 삭제 갱신 작업에 많은 제한사항을 가짐

자신만의 인덱스를 가질 수 없음

 

CREATE VIEW testView AS = 뷰를 만들어줘 testView라는 이름으로 ...로 
SELECT Col1, Col2 = 조회해줘 Col1,과 Col2를
FROM test; = test로 부터
SELECT * FROM testView; = 모두 보여줘 testView로부터

CREATE VIEW 문을 사용하여 뷰 생성

 

ALTER VIEW testView AS = 수정해줘 testView를 ...로 
SELECT Col1, Col2, Col3 = 조회해줘 Col1, Col2, Col3를
FROM test; = test로부터

SELECT * FROM testView; = 모두 보여줘 testView로부터

ALTER 문을 사용해서 뷰를 수정

 

DROP VIEW testView = 삭제해줘 testView 뷰를

 

DROP 문을 사용하여 생성된 뷰를 삭제

 

city, country, countrylanguate 테이블을 JOIN하고, 한국에 대한 정보만 뷰 생성하기

SELECT * = 보여줘 모든정보를
FROM city = city로부터

JOIN country ON city.CountryCode = country.Code = country도같이 근데 city.CountryCode랑 같아야되
JOIN countrylanguage ON city.CountryCode = countrylanguage.CountryCode; = contrylanguage도같이 근데 city.CountryCode랑 같아야되.

 

INSERT INTO

테이블 이름 다음에 나오는 열 생략가능

생략할 경우에 value 다음에 나오는 값들의 순서 및 개수가 테이블이 정의된 열 순서 및 개수와 동일해야함

 

INSERT INTO SELECT

test 테이블에 있는 내용을 test2 테이블에 삽입

INSERT INTO test2 SELECT * FROM test; = 삽입해줘 test2에 모든정보를 찾아서 test로부터

 

UPDATE

기존에 입력되어 있는 값 변경하는 구문

WHERE절 생략 가능하나 테이블의 전체행의 내용 변경

 

UPDATE test = test를 업데이트해줘
SET col1=1, col2=.0, col3='test' = 정해줘 col1=1, col2=1.0, col3='test'로
WHERE id = 1; = id가 1인부분을 (WHERE id 안치면 모든 col1, col2, col3의 값이 변경되니까 조심)

 

DELETE FROM test = 삭제해줘 test로부터
WHERE id = 1; = id가 1인부분을(WHERE id 안치면 모든데이터가 삭제되니까 조심)

DELETE(휴지통에버리기)

DELETE 행 단위로 데이터 삭제하는 구문

DELETE FROM 테이블이름 WHERE 조건;

데이터는 지워지지만 테이블 용량은 줄어들지않음(롤백이됨, 휴지통에 넣어져있다고 생각하면됨)

원하는 데이터만 지울 수 있음

삭제 후 잘못 삭제한 것을 되돌릴 수 있음(휴지통처럼)

 

TRUNCATE TABLE test = 삭제해줘 test로부터
TRUNCATE(영구삭제)

용량이 줄어 들고, 인덱스 등도 모두 삭제

테이블은 삭제하지는 않고, 데이터만 삭제

한꺼번에 다 지워야함

삭제 후 절대 되돌릴 수 없음

 

DROP TABLE test; = 삭제해줘 test 테이블을
SELECT * FROM test; = 아무결과도 나오지않음. 공간 객체를 전부 삭제했기때문

DATA TABLE

테이블 전체를 삭제, 공간, 객체를 삭제

삭제 후 절대 되돌릴 수 없음

 

DROP DATABASE

DROP DATABASE문은 해당 데이터베이스를 삭제

 

자신만의 연락처 테이블 만들기 해보기

이름, 전화번호, 주소, 이메일...

 

(참고) 데이터 타입: http://dev.mysql.com/doc/refman/8.0/en/data-types.html

 

UNION DISTINCT = 합치기 (DISTINCT 생략가능)

 

SELECT 앞에 EXPLAIN 붙여보기

쪼개기는 MODELING, NORMALIZATION

반응형

'🖥Web > 🔥DB & SQL' 카테고리의 다른 글

[Sql] SQL Cursor  (0) 2020.03.20
[SQL] SQL의 예외처리  (0) 2020.03.20
[SQL] 프로시저(procedure)와 declare 차이  (0) 2020.03.20
[SQL] 프로토콜에서 procedure 생성  (0) 2020.03.17
[SQL]MySql - 1 초급  (0) 2020.01.05