** 제약 (constraint)
1. not null : 널값을 허용하지 않음.
2. default : 기본값 , 널값대신 관리자가 특정값을 기본값으로 넣고 싶을때.
3. primary key : 기본키, 중복된 데이터를 허용하지 않는다. 테이블당 하나, 널값이 들어가면 안됨.
크기가 900이하, clustered index 생성
4. unique : 중복된 data를 허용하지 않음, 크기가 900이하, non-clustered index 생성, null이 허용됨.
5. check : 규칙같은것.
6. foreign key : 참조키, 외래키,
7. rule
----------------------------------------------------------------------------------------
※알고가기~!!!
sp_help emp10 // 개체의 전체적인 정보를 보여줌
sp_helpconstraint emp11 //제약에 대한 정보를 보여줌.
1. not null 제약
create table emp10
(empno int not null, ename char(10))
2. default 제약
① 제약에 이름을 붙이지 않을때
drop table emp11
create table emp11
(empno int default 1, ename char(10))
②제약 이름 붙이기!! : 나중에 제약을 삭제할때 사용한다.
: default제약의 이름은 통상적으로 "DF_테이블명_컬럼명"으로 사용한다. 권장사항
create table emp11
(empno int constraint df_emp11_ename default 1, ename char(10))
3.primary key
①primary key가 하나일때
create table emp12
(empno int constraint PK_EMP12_EMPNO primary key, ename char(10))
②primary key가 2개일때
CREATE TABLE EMP14
(JUMIN1 CHAR(6), JUMIN2 CHAR(7),
NAME CHAR(10) CONSTRAINT PK_EMP14_JUMIN PRIMARY KEY(JUMIN1,JUMIN2))
<실습해보기>PRIMARY KEY, NOT NULL, DEFAULT------------------------------
테이블명 USER03
----------------------------------
U_ID U_NAME U_JOB
----------------------------------
기본키 널 허용(x) 기본값 -무직
----------------------------------
CREATE TABLE USER03
(U_ID INT CONSTRAINT PK_USER03_U_ID PRIMARY KEY,
U_NAME CHAR(10 ) NOT NULL,
U_JOB CHAR(10) CONSTRAINT DF_USER03_U_JOB DEFAULT '무직' )
sp_helpconstraint USER03 // 제약정보 확인
---------------------------------------------------------------------------
4.UNIQUE 제약
CREATE TABLE EMP13
(EMPNO INT CONSTRAINT UK_EMP13_EMPNO UNIQUE, ENAME CHAR(10))
5.CHECK 제약
CREATE TABLE EMP15
(EMPNO INT, ENAME CHAR(10),
GENDER CHAR(2) CONSTRAINT CK_EMP15_GENDER CHECK(GENDER IN('남', '여')))
- 테이블을 생성후 아래의 데이터를 입력하면.. 마지막 쿼리에서 충돌 에러가 나게 된다.
INSERT INTO EMP15 VALUES(111,'이순신', '남')
INSERT INTO EMP15 VALUES(111,'김신', '여')
INSERT INTO EMP15 VALUES(111,'하이수','녀')
<실습해보기>CHECK 제약 추가, 삭제, 멈춤/동작---------------------------------
---------------------------
테이블명 EMP16
---------------------------
EMPNO ENAME DEPTNO
---------------------------
111 유명한 10
112 강인해 20
113 허무한 30
---------------------------
1. 위의 표와같은 테이블 생성
CREATE TABLE EMP16
(EMPNO INT, ENAME CHAR(10), DEPTNO INT)
INSERT INTO EMP16 VALUES(111,'유명한',10)
INSERT INTO EMP16 VALUES(112,'강인해', 20)
INSERT INTO EMP16 VALUES(113,'허무한', 30)
2. 생성된 테이블에 부서번호가 10, 20, 30, 40번만 입력되도록 CHECK제약 추가
ALTER TABLE EMP16
ADD CONSTRAINT CK_EMP16_DEPTNO
CHECK(DEPTNO IN(10,20,30,40))
3. 제약 삭제하려면..
ALTER TABLE EMP16
DROP CONSTRAINT CK_EMP16_DEPTNO
4. 제약이 없는 상태의 테이블에 아래와 같은 쿼리를 줘보자.
INSERT INTO EMP16 VALUES(114,'왕고집',50)
5. 위의 쿼리가 들어간 상태에서 제약을 다시 주게 되면 제약과 어긋나는 부서번호가 50인 데이터가 있으므로 충돌에러가 나게 된다. 이것을 해결하기 위해서..
기존의 데이터를 검사하지 않고 제약을 설정
ALTER TABLE EMP16 WITH NOCHECK
ADD CONSTRAINT CK_EMP16_DEPTNO
CHECK(DEPTNO IN(10,20,30,40))
※기본키, UNIQUE, DEFAUL에서는 WITH NOCHECK를 사용할수 없고, 추가하려면 널값을 허용하지 않겠다는 제약을 추가해주고 난다음에 해야함
6. 제약이 설정되어 있는 상태의 테이블에 다음과 같이 제약에 맞지 않는 쿼리를 추가하려면..
INSERT INTO EMP16 VALUES(114,'왕고집',50)
제약 멈추기 : 제약을 잠시 멈추고 위의 쿼리를 추가한다!!
ALTER TABLE EMP16
NOCHECK CONSTRAINT CK_EMP16_DEPTNO
7. 제약을 다시 활성화
ALTER TABLE EMP16
CHECK CONSTRAINT CK_EMP16_DEPTNO
---------------------------------------------------------------------------
<실습하기> 주민등록번호 제약주기
CREATE TABLE JUMIN
(FIRSTID INT NOT NULL CONSTRAINT CK_JUMIN_FIRSTID
CHECK(FIRSTID LIKE'[0-9][0-9][01][0-9][0-3][0-9]'),
SECONDID INT NOT NULL CONSTRAINT CK_JUMIN_FIRSTID
CHECK(SECONDID LIKE'[1-4][0-9][0-9][0-9][0-9][0-9]'))
"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기, 각종 광고, 영업, 판매, 제안서, 전단지 반응율 3배×10배 이상 높이는 마법의 8단계 공식" |
![]() |
☞자세히보기 |
|
|