Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

코딩기록

Day - 34 [Maria DB] CONSTRAINT 본문

study

Day - 34 [Maria DB] CONSTRAINT

9-99zy 2023. 3. 21. 10:18

06_CONSTRAINT

  • 제약조건은 컬럼에 데이터를 넣을 경우 특정한 조건을 만족시켜야 할 경우 사용 합니다.


1) 기본 키 제약 조건(primary key)

  • 중복을 허용하지 않고, null 을 사용하지 않는다.
  • 테이블 종속적이다. (테이블에 1개만 가능)
  • 종속적 이라는것은 1. 다른데다 빌려줄 수 없고, 2. 테이블이 사라지면 PK 도 같이 사라진다는 뜻이다.
  • 하나 이상의 컬럼을 구성된다.(16개)
-- 테이블 생성시 함께 생성(가장 많이 사용)
create table pk_test(
	first_col int(3) primary key,
	second_col varchar(4)
);

desc pk_test;

insert into pk_test (first_col)values(1);
-- Field 'first_col' doesn't have a default value
insert into pk_test (second_col)values('test');
-- Duplicate entry '1' for key 'PRIMARY' 
-- **Duplicate 가 뜨면 같은 값을 넣은것이다. 중복.
insert into pk_test (first_col)values(1);

 

기존 테이블에 추가하는 방법 :

ALTER TABLE [테이블 명] ADD CONSTRAINT [제약조건 종류] (대상컬럼);

-- 기존테이블에 추가
select * from employees;
-- ALTER TABLE [테이블 명] ADD CONSTRAINT [제약조건 종류] (대상컬럼);
alter table employees add constraint primary key (emp_no);
alter table employees add primary key (emp_no);
desc employees;

 

중복값 추가 방법
-- 중복값 추가
-- Duplicate entry '112' for key 'PRIMARY'
-- emp_no 112 키를 이미 가지고 있어서 오류가 났다.
insert into employees (emp_no, first_name, family_name, email, mobile, salary)
values(112,'태근','김','email@naver','01020343054','99999999');

-- upsert(key 가 없으면 insert, 있으면 update)
insert into employees (emp_no, first_name, family_name, email, mobile, salary)
values(112,'태근','김','email@naver','01020343054','99999999')
on duplicate key update first_name = '태곤', family_name='박';

 

 

복합키(한개 이상의 컬럼으로 키를 생성 하는 것) 

복합키에 추가되는 컬럼이 외래키 일 경우 update 나 insert 에 제한을 줄 수 있다.

복합키에 추가되는 컬럼이 외래키 일 경우 사용하지 말자는 뜻이다.

 

create table pk_two_test(
	first_col int(5),
	second_col varchar(10),
	third_col date,
	primary key(first_col,second_col)
);
desc pk_two_test;

복합키 결과


2) NOT NULL (NULL 을 허용하지 않음)

NOT NULL 은 컬럼의 속성으로 취급한다. -> modify 를 사용하는 이유도 속성으로 취급하기 때문이다.

ALTER TABLE [테이블 명] MODIFY COLUMN [컬럼명] [데이터타입] (대상컬럼);

create table pk_two_test(
	first_col int(5),
	second_col varchar(10),
	third_col date not null,
	primary key(first_col,second_col)
);
-- ALTER TABLE [테이블 명] MODIFY COLUMN [컬럼명] [데이터타입] (대상컬럼);
-- Data truncated for column 'second_col' at row 1
-- truncated 데이터 비우거나 null을 채우라는 뜻.
-- 이미 null 하라고 했는데 not null 하라고? 라는뜻
-- not null은 제약조건이 아니라 속성으로 취급한다. modify

alter table pk_test modify column second_col varchar(4) not null;
select * from pk_test;
delete from pk_test;
desc pk_test;

 

 

 

 

짝대기 하나는 1:1 관계를 말한다.

없어도 되면 0

1:다 관계

rdb 는 관계를 파악해야한다.