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);
중복되지 않는 유일한 값
PRIMARY KEY와 비슷하나, UNIQUE는 NULL을 허용
입력되는 데이터를 점검하는 기능
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);
"CREATE문에서"
birthYear INT NOT NULL DEFAULT -1
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지울 수 있음
ALTER TABLE userTBL
ADD homepage VARCHAR(30)
DEFAULT 'www.naver.com'
NULL;
"열의삭제"
ALTER TABLE userTBL
DROP COLUMN mobile1;
"제약조건삭제"
ALTER TABLE userTBL
DROP CONSTRAINT 제약조건명;
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;
- 뷰는 복잡한 질의를 간단하게 표현할 수 있게함
-긴 쿼리를 뷰로 작성
-뷰를 테이블처럼 사용 가능
- 뷰는 데이터 무결성과 독립성을 보장하는데 활용된다.
- 뷰는 데이터 보안 기능을 제공함
-보안에 도움
-사용자가 중요한 정보에 바로 접근하지 못함- 동일한 데이터에 대한 여러가지 뷰를 제공함
- 뷰는 사용자들의 그룹별로 특정한 기준에 따라 데이터를 접근하도록 함
물리적인 공간을 뜻한다.
데이터베이스는 논리적 공간이다.
테이블스페이스를 지정하지 않은 경우
-시스템 테이블스페이스에 테이블이 저장된다.
시스템 변수 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;