본문 바로가기

모바일 프로그래밍/SQLite3 (Android)

UNIQUE 제약조건 테이블에 적용하기

 

sample2.db
다운로드

 

테이블을 Modify(수정)해서 할 경우 TEXT NOT NULL 이면 Field가 수정이 안되고 초기화 되는 경우가 있어서 다시 만들어줘야 하는 번거로움이 있지만....

예를 들면 INTEGER PRIMARY KEY AUTOINCREMENT의 경우 INTEGER PRIMARY KEY만 남을 경우가 크며

TEXT NOT NULL 또한 수정할 경우 re_id를 수정한다면 re_id TEXT NOT NULL UNIQUE만 되고 나머지는 re_pw TEXT로 초기화 될 경우가 높습니다. 왜 그런지는 모르겠습니다.

자 그럼 C:\Java\database_example/sample2/sample2.db로 만듭니다.

 

테이블 이름은 my_member 로 해주고 특별히 주고 싶은 이름이 있다면 다르게 주셔도 됩니다.

Field name은 편의상 my_no로 했습니다.

중요한건 Field type인데 저번에 하셨던대로만 한다면

INTEGER PRIMARY KEY AUTOINCREMENT

 

 

 

Field name 을 my_id

Field Type 를 TEXT NOT NULL UNIQUE 로 합니다.

다른점은 널이 아니고 UNIQUE 라는 제약 조건이 들어갔음을 의미합니다.

 

 

비밀번호는 제약조건을 주면 안되므로

my_pw

TEXT NOT NULL로 합니다...

동일한 비밀번호가 있을 확률이 있으니까요 물론 보안을 위해 비밀번호는 어렵게 만드시는 것도 좋겠습니다.

my_nickname

TEXT NOT NULL로 하고

Log 기록은 살펴보면 Log 기록 살펴보실 때 종료하게되면 기록이 없어지므로 생성쿼리를 찾을 때 어려움이 있게됩니다. 꼭 복사해서 따로 보관해둡시다. 

 

쿼리는 다음과 같고

CREATE TABLE my_member (my_no INTEGER PRIMARY KEY AUTOINCREMENT, my_id TEXT NOT NULL UNIQUE, my_pw TEXT NOT NULL, my_nickname TEXT NOT NULL)

그럼 INSERT Query를 Execute SQL에 적어 주어 실행해 봅시다.

그럼 쿼리 때리시기전에 저장 하는 습관 잊지 마시고 저는 저장을 안해서 SQLite browser가 버그가 좀 있더군요.

그래서 다시 만들었습니다.

INSERT 쿼리는

INSERT INTO my_member(my_id,my_pw,my_nickname) VALUES ('re','as1945','하얀소닉')

자 그럼 UNIQUE 잘 먹히는지 보기 위해 re라는 똑같은 이름으로 쿼리를 때려보겠습니다.

아무리 DB를 쳐도 결과는 위의 결과와 동일 하군요. 그럼 다르게 입력해보겠습니다

re라는 아이디 대신 kaka라는 아이디로 입력해보겠습니다.

잘 들어가군요.

 

잘 들어가고 INSERT SQL문 예제 들어보면 

INSERT INTO my_member(my_id,my_pw,my_nickname) VALUES ('re','as1945','하얀소닉') 아이디만 바꾸셔도 충분히 효과 보실수 있습니다. UNIQUE는 잘되네요... 이상으로 강의를 마치겠습니다.