강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

<ms-sql>제약 (constraint)-NOT NULL, DEFAULT, PRIMAY
작성자 : 99 단국강토
등록날짜 : 2008.12.30 16:57
2,516

** 제약 (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단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
2475 MsSql 날짜 함수 99 단국강토 01.02 1560
2474 SQL Server에서 글로벌 변수 구현하기 99 단국강토 12.30 2238
열람중 <ms-sql>제약 (constraint)-NOT NULL, DEFAULT, PRIMAY 99 단국강토 12.30 2517
2472 MSSQL Server DBA 가이드-5 M 최고의하루 12.26 1797
2471 MSSQL Server DBA 가이드-4 M 최고의하루 12.26 3480
2470 MSSQL Server DBA 가이드-3 M 최고의하루 12.26 1559
2469 MSSQL Server DBA 가이드-2 M 최고의하루 12.26 1524
2468 MSSQL Server DBA 가이드-1 M 최고의하루 12.26 1700
2467 [SQL] sysobjects M 최고의하루 12.26 2259
2466 1..순위 결정 함수 M 최고의하루 12.24 1800
2465 데이터베이스의 저장 프로시저를 자동으로 생성 M 최고의하루 12.24 1468
2464 문자열에서 단어 분리 - SQL Server 2005 M 최고의하루 12.23 1896
2463 25가지 SQL작성법-3 M 최고의하루 12.23 2178
2462 25가지 SQL작성법-2 M 최고의하루 12.23 2361
2461 25가지 SQL작성법-1 M 최고의하루 12.23 1740
2460 제약조건(1) M 최고의하루 12.20 3633
2459 [MSSQL]SQL Server Management Studio Express M 최고의하루 12.20 2777
2458 Microsoft SQL Server 2005 Express Edition SP2 M 최고의하루 12.19 2122
2457 Microsoft SQL Server Management Studio Express SP2 M 최고의하루 12.19 1976
2456 [MSSQL] 데이터 백업과 복구 ( SQL SERVER ) M 최고의하루 12.18 2192
2455 [ Sybase ] Sybase 기본 명령어 M 최고의하루 12.18 2780
2454 오라클(Oracle) 10g Database 설치 M 최고의하루 12.04 2280
2453 오라클데이터베이스 복구 M 최고의하루 12.04 1892
2452 요일, 연중/월중 몇째주 구하기 13 김영철 01.23 2902
2451 다른 서버로 DB 백업 받기 13 김영철 01.23 1887
2450 MSSQL 내장 함수 목록 13 김영철 01.23 2060
2449 몇가지 sql 명령어 13 김영철 01.23 2825
2448 명령어정리 13 김영철 01.23 1614
2447 order by newid() 13 김영철 01.23 2223
2446 SQL : Categories : 프로시저(Procedure). 13 김영철 01.23 1975
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취