DB를 사용하다보면 입력값의 제한이 필요할 때가 있습니다.
예를 들어서 나이 몇살 이상만 입력을 한다던가,
특정 날짜 이후만 입력을 한다던가 할 수 있습니다.
이 때 사용할 수 있는 방법으로 체크라고 있습니다.
입력값을 제한하는 것입니다.
우선 저는 SQL Server에서만 사용을 하였습니다.
다른 DB에는 있을지 없을지는 정확하게는 모르겠으나,
아마도 있지 않을까 싶긴 합니다.
MS-SQL에도 있는데 Oracle등에도 있지 않을까 싶습니다.
지금은 체크를 사용하는 방법에 대해서 자세히 적어보도록 하겠습니다.
1. CHECK란?
체크란, 데이터를 입력할 때 해당 값이 조건에 부합하는지 체크를 하는 것입니다.
그래서 부합이 되면 입력을 하고, 부합되지 않으면 입력되지 않도록 하는 것입니다.
2. 설정 방법
설정 방법은 몇가지가 있습니다.
테이블을 생성할 때 할 수도 있고,
테이블이 있는 상황에서 중간에 추가할 수도 있습니다.
물론, 체크로 준 제약조건을 삭제할 수도 있습니다.
설정 방법에 대해서 정리를 해보도록 하겠습니다.
1) 테이블 생성하면서 체크로 제약조건 설정하기
예시 쿼리는 다음과 같습니다.
CREATE TABLE [테이블명] ( [컬럼명] [데이터형식] [제약조건], CONSTRAINT [CHECK명] CHECK ([조건절]) )
위 쿼리를 가지고 제가 직접 작성한 쿼리입니다.
CREATE TABLE CheckTest ( member_name VARCHAR(20), age int, CONSTRAINT ck_test CHECK (age > 19) )
위처럼 작성을 해서 테이블을 생성해 보았습니다.
그랬더니 아래처럼 제약 조건이 걸려서
테이블이 생성된 것을 확인할 수 있습니다.
2) 체크 제약조건 삭제하기
삭제를 할 수도 있습니다.
삭제는 DROP 명령을 이용하면 됩니다.
사용방법은 다음과 같습니다.
ALTER TABLE [테이블명] DROP [CHECK명]
위 쿼리를 이용하여 제가 직접 작성한 쿼리입니다.
ALTER TABLE CheckTest DROP ck_test
위처럼 작성을 하였더니,
아래처럼 제약조건이 사라진 것을 볼 수 있습니다.
3) 체크 제약조건 추가하기
기존에 없었을 때 제약조건을 추가할 수도 있습니다.
ALTER명령을 이용해서 할 수 있습니다.
예시 쿼리는 다음과 같습니다.
ALTER TABLE [테이블명] ADD CONSTRAINT [CHECK명] CHECK ([조건절])
위 쿼리를 이용하여 제가 직접 작성한 쿼리입니다.
ALTER TABLE CheckTest ADD CONSTRAINT ck_test CHECK (age > 19)
위처럼 작성하였더니
아래처럼 제약조건이 추가가 된 것을 확인할 수 있습니다.
3. 데이터 입력하기
이제 데이터를 입력해보도록 하겠습니다.
데이터 입력은 똑같이 INSERT문을 이용해서 하면 됩니다.
저는 우선 테스트로 홍길동이라는 사람이 나이 20살이라고
입력하도록 하겠습니다.
쿼리는 다음과 같이 입력하였습니다.
INSERT INTO CheckTest VALUES( '홍길동', '20')
그랬더니 아래처럼 정상적으로 입력이 되었다고 뜹니다.
그리고 조회를 해 보았습니다.
SELECT * FROM CheckTest
그랬더니 문제 없이 홍길동에 대한 데이터가 들어가 있는 것으로
확인이 되었습니다.
이번에는 홍길순이라고해서 데이터를 입력해보도록 하겠습니다.
나이는 19살이라고 입력하도록 하겠습니다.
쿼리는 다음과 같이 입력하였습니다.
9
INSERT INTO CheckTest VALUES( '홍길순', '19')
그랬더니 아래처럼 에러가 발생하네요.
------------------------------------------------------------------------
메시지 547, 수준 16, 상태 0, 줄 37
The INSERT statement conflicted with the CHECK constraint "ck_test". The conflict occurred in database "....;", table "dbo.CheckTest", column 'age'.
The statement has been terminated.
------------------------------------------------------------------------
중간에 DB명은 제가 관리하는 회사의 테스트DB네임이여서
가렸습니다.
데이터는 입력이 안되었겠지만
혹시 몰라서 다시 한번 조회를 해 보았습니다.
SELECT * FROM CheckTest
그랬더니 역시나 아래처럼 홍길동밖에 없는 것을 확인할 수 있습니다.
4. 제약조건 확인하기
제약조건은 툴을 이용해서 확인할수도 있고,
쿼리를 이용해서 확인할수도 있어요.
저는 두가지 방법에 대해서
모두 정리를 해볼께요~
1) 툴(SSMS)를 이용하는 방법
MS-SQL을 사용할 때 제일 많이 사용한다고 생각하는 툴인
SSMS 기반으로 우선 말씀드릴께요.
위에 이미지 스샷 찍었던 것이 있어서
아실 분들은 다들 아실 텐데요
그래도 다시 한번 말씀드릴께요.
확인하고 싶은 테이블을 선택 후 제약조건을 확인하면 되십니다.
그러면 위처럼 제약조건이 어떤게 걸려있는지 확인이 가능합니다.
2) 쿼리를 이용하는 방법
쿼리는 다음과 같습니다.
SP_HELPCONSTRAINT [테이블명]
위 쿼리를 이용해서 제가 위에서 만든 체크 제약조건을 검색해 보았습니다.
SP_HELPCONSTRAINT CheckTest
위처럼 하니깐 아래처럼 나오네요.
제약조건이 걸린 테이블부터, 체크 설정해 놓은 이름, 조건 등등
여러가지가 나오네요.
위처럼 해서 체크로 제약조건을 걸 수 있습니다.
그리고 확인할 수도 있습니다.
위에서 말한 것과 같이
제약조건을 걸어야 할 경우가 있을텐데
그 때, 이렇게 DB자체에 걸어놓으면 입력이 안될 것이기 때문에
편하게 이용할 수 있을거 같습니다.
이상으로 MS-SQL에서 체크(CHECK)를 이용하여 입력값 제한하는 방법이였습니다~
'컴퓨터관련 > MS-SQL' 카테고리의 다른 글
[MS-SQL]SSMS 단축키 (0) | 2019.04.16 |
---|---|
[MS-SQL]컬럼명으로 테이블 검색하기 (0) | 2019.04.11 |
[MS-SQL]데이터베이스 생성, 변경, 삭제하기 (0) | 2019.04.08 |
[MS-SQL]sa(시스템)계정 로그인 및 DB접근 막기 (1) | 2019.04.05 |
[MS-SQL]순위 구하기 (0) | 2019.04.02 |