05_자료형 및 제약조건
use mydb
[자료형DataType]
테이블에 들어갈 데이터형을 정해야 하는데,
이왕이면 최적화해서 테이블 컬럼의 공간을 효율적으로
정해 테이블을 설계한다.
DB의 성능향상 및 공간의 효율성을 위해
-->테이블설계(스키마정의)
1.숫자형
int 4byte
tinyint 1byte 0~255
decimal(6,3) 실수
2.문자형
char
고정된 길이의 영역을 바로 할당하기 때문에 빠르다.
데이터가 크건, 작건 무조건 고정된 길이의 테이블 영역을
할당하기 때문에 공간적 효율성은 떨어질 수 있다.
예)주민번호,우편번호,물품코드등
varchar
테이블 크기가 효율적으로 사용되지만
이벤트가 일어날 당시에 메모리를 재할당해야 하기 때문에
char보다는 느림. 'a'면 1바이트라고 한번 더 생각함.
예)아이디, 주소등
select 10
select 'king'
declare @a int,@b char(10),@c varchar(20) --변수선언
set @a=10
set @b='happy'
set @c='happy' --초기값할당
select @a
select @b+'#'
select @c+'#'
3.날짜형
smalldatetime 년월일
datetime 년월일시분초
select getdate()
drop table tb_mem
create table tb_mem
(
uno int,
uid varchar(20) primary key,--기본키
uname varchar(20),
uage tinyint default 0,
regdt smalldatetime default getdate()
)
insert tb_mem(uno,uid,uname) values(1,'kim','홍길동')
insert tb_mem(uno,uid,uname) values(1,'kim','홍길동')
insert tb_mem(uno,uname) values(1,'홍길동')
select * from tb_mem
insert into tb_mem values(1,'kim2','개나리',20,'2008-05-16')
insert into tb_mem values(1,'kim2','개나리',25,'2008-05-16')
insert into tb_mem values(2,'lee3','진달래',20,'2008-05-16')
select * from tb_mem
delete from tb_mem where uage=20
drop table tb_mem
[제약조건]
-데이터 무결성을 위해 강제성을 테이블에 부여
-자료의 무결성을 테이블 설계에서 강제하여 지킴으로서
보다 효율적으로 데이터관리의 중요한 역할을 함.(강제성)
1.default 제약조건
사용자가 값을 안넣으면 해당컬럼이 정의한 기본값을
자동으로 넣어준다.
2.primary-key 기본키
테이블의 내용에서 각각의 레코드(인스턴스)를 대표하는
유일한 컬럼은 반드시 존재해야 됨.
why? 해당 레코드만 딱 꼬집어서 수정, 삭제, 조회하기 위해
즉 where절에 걸릴수 있는 대표적인 컬럼을 미리 강제한다.
-primary key는 테이블당 1개씩 반드시 존재해야 한다.
-조회가 자주 일어나는 컬럼이 primary-key의 대상이 된다.
-primary key가 걸리는 컬럼은 빨리 조회할 수있는
기능이 추가된다.(인덱스와 연관)
-primary key는 null값을 넣을수 없다.
-유일성 보장, not null 속성을 포함
-인덱스(조회를 빠르게 하는 기능)가 해당 컬럼에 적용
-MS-SQL(클러스터 인덱스), 오라클(넌클러스터 인덱스)
3.unique 제약조건
유일성 보장. 테이블당 여러개 가능. 단1회 null허용
drop table tb_mem
create table tb_mem
(
uid varchar(10) primary key,--default not null
uname varchar(20),
jumin1 char(6) unique not null
)
insert tb_mem values('lee','홍길동','880125')
insert tb_mem values('kim','홍길동','880125')
4.not null 제약조건
null값(빈값)을 허용하지 않겠다.
(해당컬럼에 무조건 데이터 입력해라)
예)아이디,주민번호,패스워드,취미(x)
drop table tb_mem
create table tb_mem
(
uid varchar(10) primary key,--default not null
uname varchar(20) primary key not null
)
insert tb_mem values('lee','홍길동')
insert tb_mem(uid) values('kim')
5.identity 제약조건
-게시판 글번호 같은것을 SQL서버가 자동으로
1씩 증가하는 값을 넣어준다.
-identity(초기값,증가값)형태로 이루어지고
자료형은 반드시 숫자형
drop table tb_mem
create table tb_mem
(
uno int identity(1,1),
uid varchar(10) primary key
)
insert tb_mem(uid) values('개나리')
insert tb_mem(uid) values('진달래')
select * from tb_mem
6.check 제약조건
데이터의 범위를 제한시키는 제약조건
drop table tb_mem
create table tb_mem
(
uno int identity,
uid varchar(10) primary key,
uaddr varchar(10) check(uaddr in('서울','대전','부산'))
)
insert tb_mem values('lee','서울')
insert tb_mem values('kim','인천')