테이블과 뷰

원래벌레·2022년 12월 6일
0

🌞 테이블

🌼 테이블 만들기

CREATE TABLE 'tabledb'.'buytbl' (
	num INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    userid CHAR(8) NOT NULL,
    FOREIGN KEY (userid) REFERENCES usertbl(userID)
);

🌱 오류 메시지의 이해

입력될 값이 userTBL 테이블의 userID열에 존재해야 한다.
해결법 : usertbl을 삭제하고 buytbl을 만든다.

🌻 제약조건

🌱제약조건이란?

데이터의 무결성을 지키기 위한 제한된 조건을 의미한다.

🌱데이터 무결성을 위한 제약조건

1) Primary KEY 제약 조건 : 개체무결성 제약
2) Foreign KEY 제약 조건 : 참조무결성 제약
3) Unique 제약
4) CHECK 제약 조건
5) Default 정의
6) Null값 허용

🌱기본키제약조건

userID char(8) NOT NULL PRIMARY KEY

CONSTRAINT PRIMARY KEY PK_userTBL_userID (userID)

PRIMARY KEY (ID, NAME)

ALTER TABLE userTBL
	ADD CONTRAINT PK_userTBL_userID
    PRIMARY KEY(userID);

🌱 외래키 제약조건

참조무결성 제약
두 테이블 사이의 관계를 선언하여 데이터의 무결성을 보장해주는 역할을 한다.
외래키 테이블이 참조하는 기준 테이블의 열은 반드시 Primary Key이거나 Unique 제약 조건이 설이 돼있어야 한다.

CREATE TABLE buyTBL
( num INT AUTO_INCREMENT NOT NULL PRIMARY KEY ,
  userID CHAR(8) NOT NULL,
  FOREIGN KEY(userID) REFERENCES userTBL(userID)
 );
 
 
 ALTER TABLE buyTBL
 	ADD CONTRAINT FK_userTBL_buyTBL
    FOREIGN KEY (userID)
    REFERENCES userTBL(userID);

🌱 Unique 제약조건

중복되지 않는 유일한 값
PRIMARY KEY와 비슷하나, UNIQUE는 NULL을 허용

🌱 CHECK 제약조건

입력되는 데이터를 점검하는 기능
ex)키제한, 출생년도 제한

CREATE TABLE userTBL
( userID CHAR(8) PRIMARY KEY,
  name VARCHAR(10),
  birthYear INT CHECK (birthYear >= 1900 AND birthYear <=2023),
  mobile1 char(3) NULL,
  CONSTRAINT CK_name CHECK(name IS NOT NULL)
)

ALTER TABLE userTBL
	ADD CONSTRAINT CK_mobile1
    CHECK(mobile1 >100 AND mobile1 <130);

🌱 DEFAULT정의

"CREATE문에서"
birthYear INT NOT NULL DEFAULT -1

🌱NULL값 허용

NULL값을 허용하면 NULL, 아니면 NOT NULL
PRIMARY KEY는 자동으로 NOT NULL 설정됨
NULL값은 아무것도 없다라는 의미, 공백이나 0과는 다르다.

"NULL의 의미"

1. 부적절한 값
2. 적절하지만 모르는 값
3. 적절하고 알지만 입력하지 않은 값

🌼 테이블 압축

압출 기능은 대용량 테이블의 공간 절약하는 효과

"압출 테이블 생성"

CREATE TABLE compressTBL(emp_no int, first_name VARCHAR(14))
	ROW_FORMAT=COMPRESSED ;
  • 위의 방법으로 테이블을 생성하면 기존 방식보다 테이블을 생성하는데 시간이 더걸림
  • 압축이 돼서 기존 방식보다 낮은 Data_length를 보임

🌻 임시 테이블

  • 잠깐 사용되는 테이블이다.
"임시테이블 생성"

CREATE TEMPORARY TABLE [IF NOT EXISTS] 테이블이름
  • 세션 내에서만 존재하여 세션이 닫히면 자동삭제됨
  • 생성한 클라이언트에서만 접근이 가능하다

  • 임시테이블 삭제시점
    1) 사용자가 DROP TABLE로 직접 삭제
    2) Workbench를 종료하거나 mysql 클라이언트를 종료하면 삭제됨
    3) MySQL 서비스가 재시작되면 삭제됨

🌼 테이블 삭제

DROP TABLE 테이블1, 테이블2, 테이블3;

외애 키 제약 조건의 기준 테이블은 삭제 할 수 없음
buyTBL을 먼저 지우고 userTBL지울 수 있음

🌻 테이블 수정

🌱열의추가(ADD)

ALTER TABLE userTBL
	ADD homepage VARCHAR(30)
    		DEFAULT 'www.naver.com'
            NULL;

🌱삭제(DROP)

"열의삭제"
ALTER TABLE userTBL
	DROP COLUMN mobile1;
    
"제약조건삭제"
ALTER TABLE userTBL
	DROP CONSTRAINT 제약조건명;

🌱열의 이름 및 데이터형식 변경(CHANGE)

ALTER TABLE userTBL
	CHANGE COLUMN name uName VARCHAR(20) NULL;

Primary KEY 제거시 주의사항
해당 열이 다른 테이블에서 참조중일때 외래키를 먼저 제거한 이후에
Primary KEY를 제거 할 수 있다.


🌞 뷰

🌼 뷰의 개념

일반 사용자 입장에서는 테이블과 동일하게 사용하는 개체이다.
-뷰를 생성한 후에는 테이블처럼 접근 가능하여 동일한 결과를 얻을 수 있다.

"뷰의 생성"
CREATE VIEW v_userTBL
AS
	SELECT userid, name, addr FROM userTBL;

🌻 뷰의 장점

  1. 뷰는 복잡한 질의를 간단하게 표현할 수 있게함
    -긴 쿼리를 뷰로 작성
    -뷰를 테이블처럼 사용 가능

  2. 뷰는 데이터 무결성과 독립성을 보장하는데 활용된다.

  3. 뷰는 데이터 보안 기능을 제공함
    -보안에 도움
    -사용자가 중요한 정보에 바로 접근하지 못함
  4. 동일한 데이터에 대한 여러가지 뷰를 제공함
    - 뷰는 사용자들의 그룹별로 특정한 기준에 따라 데이터를 접근하도록 함

🌞 테이블스페이스

🌼 테이블 스페이스 개념

물리적인 공간을 뜻한다.
데이터베이스는 논리적 공간이다.


테이블스페이스를 지정하지 않은 경우
-시스템 테이블스페이스에 테이블이 저장된다.


시스템 변수 innodb_data_file_path에 관련 내용이 저장된다.

🌻 성능향상을 위한 테이블 스페이스 추가

소용량의 데이터를 사용하는 경우에는 테이블스페이스 고려하지 않아도 되나,
대용량의 데이터를 운영할 경우에는 성능 향ㅅ아을 위해 테이블스페이스의 분리를 적극고려해야 한다.

1.각테이블이 별도의 테이블스페이스에 저장되도록 시스템변수 
innodb_file_per_table이 ON으로 설정 되야 한다.

2. CREATE TABLESPACE ts_a ADD DATAFILE 'ts_a.ibd';
	CREATE TABLESPACE ts_b ADD DATAFILE 'ts_b.ibd';
    CREATE TABLESPACE ts_c ADD DATAFILE 'ts_c.ibd';
    
3. 각 테이블스페이스에 파일 생성
	CREATE TABLE table_a (id INT) TABLESPACE ts_a;

4. 테이블을 만든 후에 ALTER TABLE문으로 테이블스페이스 변경가능
	CREATE TABLE table_b (id INT)
    ALTER TABLE table_b TABLESPACE ts_b;
profile
학습한 내용을 담은 블로그 입니다.

0개의 댓글

관련 채용 정보