: DB의 무결성(정확성)을 유지하기 위한 조건이다.
NULL
을 허용하지 않는 조건NULL
을 허용하지 않는 조건, 중복된 값을 허용하지 않는 조건NOT NULL
+ UNIQUE
CREATE TABLE customer(
id VARCHAR(20),
pwd VARCHAR(20),
name VARCHAR(20),
phone_1 VARCHAR(3),
phone_2 VARCHAR(8),
birth INT,
address VARCHAR(100)
);
INSERT customer VALUES('sdfsd', NULL, 'sdfsd', '010', 12311235, 88-08-08, '서울시 용산구');
SELECT *
FROM customer;
NOT NULL
제약조건이 없으므로 NULL값을 넣을 수 있다.
DROP TABLE customer;
테이블 삭제
: 컬럼명
데이터형식
CONSTRAINT
제약조건명
제약조건
CREATE TABLE customer(
id VARCHAR(20) CONSTRAINT,
pwd VARCHAR(20) CONSTRAINT NN_pwd NOT NULL,
name VARCHAR(20) CONSTRAINT NN_name NOT NULL,
phone1 VARCHAR(3) NULL,
phone2 VARCHAR(8) NULL,
birthYear INT NULL,
address VARCHAR(100) NULL
);
INSERT customer VALUES('test12', 'test', NULL, '010', '12341234', 1988, '서울시 강서구');
INSERT customer VALUES(NULL, '1234', '이나영', '010', '12351451', 1968, '서울시 용산구');
name
,id
에NOT NULL
의 제약 조건이 있어 에러가 발생한다.
: id
가 중복이 돼 있으면 DB의 관리가 어렵다. UNIQUE
을 통해 제약 조건을 적용할 수 있다.
USE AdventureWorks2012; GO CREATE TABLE Production.TransactionHistoryArchive4 ( TransactionID int NOT NULL, CONSTRAINT AK_TransactionID UNIQUE(TransactionID) ); GO
CREATE TABLE customer(
id VARCHAR(20) CONSTRAINT PK_id UNIQUE,
pwd VARCHAR(20) CONSTRAINT NN_pwd NOT NULL,
name VARCHAR(20) CONSTRAINT NN_name NOT NULL,
phone1 VARCHAR(3) NULL,
phone2 VARCHAR(8) NULL,
birthYear INT NULL,
address VARCHAR(100) NULL
);
: NOT NULL
+ UNIQUE
의 조건이 모두 합친 제약 조건
이다.
CREATE TABLE customer(
id VARCHAR(20) CONSTRAINT PK_id PRIMARY KEY,
pwd VARCHAR(20) CONSTRAINT NN_pwd NOT NULL,
name VARCHAR(20) CONSTRAINT NN_name NOT NULL,
phone1 VARCHAR(3) NULL,
phone2 VARCHAR(8) NULL,
birthYear INT NULL,
address VARCHAR(100) NULL
);
: A테이블의 PRIMARY KEY
(기본키)를 참조하는 B테이블의 키를 FOREIGN KEY
(외래키)라한다.
이때 A테이블을 부모 테이블
, B테이블을 자식 테이블
이라 한다.
CREATE TABLE customer02(
id VARCHAR(20) CONSTRAINT PK_id2 PRIMARY KEY,
pwd VARCHAR(20) NOT NULL,
name VARCHAR(20) NOT NULL,
phone1 VARCHAR(3) NULL
CHECK(phone1 IN('010', '011', '016', '017', '018', '019')),
phone2 VARCHAR(8) NULL,
birthYear INT NULL
CHECK(birthYear >= 2000
AND birthYear <= year(GETDATE())),
address VARCHAR(100) NULL
);
INSERT customer02 VALUES('test111', '12121', '김구라', '070', '12341254', '2002', '서울시 영등포구');
070
은CHECK
제약 조건에 해당하지 않으므로 제약 조건을 위반한다.
INSERT customer02 VALUES('test111', '12121', '김구라', '010', '12341254', '2002', '서울시 영등포구');
SELECT *
FROM customer02;
: 아무런 값을 입력하지 않았을 때 DEFAULT
값이 입력되는 조건
CREATE TABLE order01(
id VARCHAR(20) NOT NULL,
pcode VARCHAR(20) NOT NULL,
order_num INT IDENTITY,
quantity VARCHAR(20) NULL DEFAULT '1',
orderDate DATETIME NULL DEFAULT CURRENT_TIMESTAMP
);
INSERT order01(id, pcode) VALUES('test01', 'p1');
INSERT order01(id, pcode) VALUES('test02', 'p2');
SELECT *
FROM order01;
아무런 값이 들어가지 않았을때
DEFAULT
값이 들어간다.
CREATE TABLE order02(
order_num IDENTITY(1,1),
quantity VARCHAR(10) NULL,
orderDate DATETIME NULL,
id VARCHAR(20),
pcode VARCHAR(20),
CONSTRAINT PK_on PRIMARY KEY(order_num),
CONSTRAINT FK_id FOREIGN KEY(id) REFERENCES customor(id),
CONSTRAINT FK_pcode FOREIGN KEY(pcode) REFERENCES products(pcode)
);
CREATE TABLE customer03(
name VARCHAR(20),
phone VARCHAR(13),
birthday DATETIME,
address VARCHAR(80),
CONSTRAINT PK_COMBO_nPhone PRIMARY KEY(name, phone)
);
INSERT customer03 VALUES('김장비', '01012341234', GETDATE(),'서울시 강남구');
INSERT customer03 VALUES('김유비', '01012341234', GETDATE(),'서울시 강남구');
INSERT customer03 VALUES('김장비', '01012341235', GETDATE(),'서울시 강서구');
select * from customer03;