◈ 로컬디스크(C)에 msdata, mslog폴더를 생성한다
◈ Constraint(제약조건) 종류
1. Primary Key 제약조건
2. Unique Key 제약조건
3. Foreign Key 제약조건
4. Check 제약조건
5. Default 제약조건
6. Rule 제약조건
********************************************************************************
use master
go
create database sawondb -- sawondb라는 데이터베이스 생성
on
(name = 'sawondb_data'
,filename = 'c:msdatasawondb_data.mdf'
,size = 10mb
,maxsize = 30mb
,filegrowth = 10%
)
log on
(name = 'sawondb_log'
,filename =' c:mslogsawondb_log.ldf'
,maxsize = 10mb
,filegrowth = 10%
)
go
use sawondb
go
create table dept -- dept테이블 생성
(deptno tinyint primary key -- column level의 제약조건
);
-- insert into dept values(null); -- not null이여야 하기 때문에 삽입 불가능
insert into dept values(10); -- 삽입 가능
-- insert into dept values(10); --고유한 값이여야 하기 때문에 삽입 불가능
insert into dept values(20);
select * from dept;
▶ dept 테이블에 존재하는 제약조건을 조회
sp_helpconstraint dept; -- 제약조건 이름을 알아야 유지보수할 수 있다
drop table dept; -- dept 테이블을 제거
create table dept
(deptno tinyint
,dname varchar(10) not null
,addr varchar(30) -- null : 아무것도 안쓰면 null값을 허락한다
,jitel varchar(3)
,kuktel varchar(4)
,tel varchar(4)
,constraint dept_deptno_pk primary key(deptno) -- Table level 제약조건
);
insert into dept values (10, '총무부', '서울', '02', '418', '9004');
insert into dept values (20, '생산부', '부산', '051', '777', '8888');
insert into dept values (30, '영업부', '인천', '032', '888', '9999');
insert into dept values (40, '관리부', '광주', '062', '333', '2222');
insert into dept values (50, '''전산부''', '대전', '042', '555', '7777');
-- 데이터에 '를 넣어주려면 '' ''하면 된다
select * from dept;
----------------------------------------------------------------------------------------------------------------------------------------
▶ 유니코드 데이터 정렬
create table unicodetbl
(korname nvarchar(10) collate Korean_Wansung_CI_AS
,engname varchar(20)
,chaname nvarchar(10) collate Chinese_PRC_CI_AS
,jpname nvarchar(10) collate Japanese_CI_AS
); -- nvarchar(10)에서 n은 유니코드 데이터를 받아주겠다는 의미이고, 10은 글자수를 의미한다
insert into unicodetbl values('컴퓨터', 'computer', '计算机', 'コンピュ-タ-' );
insert into unicodetbl values('책상', 'desk', '书几', 'つくえ' );
insert into unicodetbl values('얼굴', 'face', '面', 'かお' );
select *
from unicodetbl
order by jpname collate Japanese_CI_AS;
select *
from unicodetbl
order by jpname collate Japanese_CI_AS desc;
▶ 일본어로 되어진 데이터베이스를 한국어로 다시 만드는 방법
alter database japandb
collate Korean_Wansung_CI_AS --> 데이터정렬
SQL 서버 서비스 다시 시작하고 --sql구성관리자
개체탐색기에서
japandb 의 옵션에서 Korean_Wansung_CI_AS 로 변경하면 된다
----------------------------------------------------------------------------------------------------------------------------------------
1)
create table emp
(empno smallint --2byte (cpu가 32bit 일때 int는 4byte)
,ename varchar(10) not null
,jubun varchar(14) not null
,constraint emp_empno_pk primary key(empno)
,constraint emp_jubun_uq unique(jubun)
);
insert into emp values(1001, '최성우', '801010-1234567'); --삽입 가능
insert into emp values(1002, '한희영', '831010-x34567');
-- 일반적으로 삽입 불가능이지만 varchar이기때문에 삽입 가능
select *
from emp;
drop table emp;
2)
create table emp
(empno smallint
,ename varchar(10) not null
,jubun varchar(14) not null
,constraint emp_empno_pk primary key(empno)
,constraint emp_jubun_uq unique(jubun)
,constraint emp_jubun_ck check(jubun like '[0-9][0-9][0-9][0-9][0-9][0-9]-[1-4][0-9][0-9][0-9][0-9][0-9][0-9]') -- varchar타입인 문자이지만 숫자로 되어진 것만 삽입되어야 한다
); -- check()는 ()안의 조건을 만족해야만 삽입이 가능하다
insert into emp values(1001, '최성우', '801010-1234567'); --삽입 가능
insert into emp values(1002, '한희영', '831010-x34567');
drop table emp;
3)
create table emp
(empno smallint
,ename varchar(10) not null
,jubun varchar(14) not null
,deptno tinyint
,constraint emp_empno_pk primary key(empno)
,constraint emp_jubun_uq unique(jubun)
,constraint emp_jubun_ck check(jubun like '[0-9][0-9][0-9][0-9][0-9][0-9]-[1-4][0-9][0-9][0-9][0-9][0-9][0-9]')
,constraint emp_deptno_fk foreign key(deptno) references dept(deptno)
);
insert into emp values(1001, '최성우', '801010-1234567');
--insert into emp values(1002, '한희영', '831010-234567', 70);
dept테이블의 deptno에 70이라는 값이 없기 때문에 위배
insert into emp values(1002, '한희영', '831010-2234567', 20);
insert into emp values(1003, '신일규', '811010-1334567', 20);
select *
from emp;
sp_helpconstraint emp;
select *
from dept;
delete dept
where deptno=10; -- foreign key 제약조건때문에 삭제 불가능
delete dept
where deptno=50; --삭제가능 why?? 참조하는 사람이 없기때문에
drop table emp;
4)
create table emp
(empno smallint
,ename varchar(10) not null
,jubun varchar(14) not null
,deptno tinyint
,constraint emp_empno_pk primary key(empno)
,constraint emp_jubun_uq unique(jubun)
,constraint emp_jubun_ck check(jubun like '[0-9][0-9][0-9][0-9][0-9][0-9]-[1-4][0-9][0-9][0-9][0-9][0-9][0-9]')
,constraint emp_deptno_fk foreign key(deptno) references dept(deptno)
);
insert into emp values(1001, '최성우', '801010-1234567', 10);
insert into emp values(1002, '한희영', '831010-2234567', 20);
insert into emp values(1003, '신일규', '811010-1334567', 20);
delete dept
where deptno=10;
select *
from dept;
--> on delete cascade : 부모테이블의 deptno =10이 삭제가 되면 10번을 참조하고 있는 emp의 deptno=10인것도 삭제된다
-- 테이블과 테이블의 관계가 1:1관계일때는 반드시 on delete cascade를적어줘야 한다
< 예제 >
create table member
(id varchar(10)
,name varchar(10)
,addr varchar(20)
,constraint member_id_pk primary key(id)
);
create table login
(id varchar(10)
,passwd varchar(10)
,constraint login_id_pk primary key(id)
,constraint login_id_fk foreign key(id) references member(id) on delete cascade
); --member테이블에서 어떠한 회원이 탈퇴한 경우 login테이블에서도 삭제가 되어야 하기때문에 on delete cascade를 적어준다
insert into member values('superman', '한승용', '서울');
insert into member values('womerz', '선주영', '분당');
insert into login values('superman', 'pass123');
insert into login values('womerz', 'qwer');
select * from member; -- 참조받는 테이블
select * from login;
어느날 superman이 탈퇴한다면
delete member where id='superman';
-- member테이블에서 삭제가 되고 login테이블에서도 삭제가 된다
[출처] 웹디황용
"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기, 각종 광고, 영업, 판매, 제안서, 전단지 반응율 3배×10배 이상 높이는 마법의 8단계 공식" |
☞자세히보기 |
|
|