본문 바로가기
oracle

1021_제약조건(not null, unique, primary key)

by 신방동불주먹 2022. 10. 25.

<primary key 추가>


ALTER TABLE `DB명`.`테이블명` ADD PRIMARY KEY (`컬럼명`, `컬럼명`);
ex) ALTER TABLE `calorie`.`COMMENT` ADD PRIMARY KEY(`ID`, `Date`);

<primary key 삭제>


ALTER TABLE `DB명`.`테이블명` DROP PRIMARY KEY;
ex) ALTER TABLE `calorie`.`COMMENT` DROP PRIMARY KEY;

 

https://www.w3schools.com/sql/sql_primarykey.ASP

 

SQL PRIMARY KEY Constraint

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

https://sql-factory.tistory.com/1345

 

 

2개 이상의 다중 컬럼으로 기본키 지정하기 

사용이유 : 

ex)

1. 외래키로 지정한 같은 사람(CustomerId) 이 같은 (CarId) 차를 구매할 수 있지만,  학생으로 보았을 때 같은 학생이 같은 수업을 동시에 듣는다는 것은 데이터 오류. 

-> 따라서 외래키이자 기본키로 설정해서 중복 될 수 없게 한다. 

2. 이렇게 되면 같은 사람이 같은 차를 두 대 살 수 없는 제한 발생 

-> 구매날짜 혹은 수강 날짜를 중복되지 못하게 함으로써 오류를 줄여간다.

 

https://hoon93.tistory.com/57

 

2개 이상의 다중 컬럼으로 기본키 지정하기

개발 업무를 하려면 필수적으로 ERD를 보게 되는데, 그냥 어렴풋이 넘겨짚었던 개념을 이제서야 정리한다. DB테이블의 Properties 또는 ERD를 보면 아래 예제처럼 2개 이상의 칼럼이 Primary Key로 지정

hoon93.tistory.com

 

MySQL에서 기본 키 제거

user_customers를 라이브 MySQL 데이터베이스의 권한에 매핑하는 다음 테이블 스키마가 있습니다. mysql> describe user_customer_permission; +------------------+---------+------+-----+---------+-----------..

sql-factory.tistory.com

 

삭제 불가

  • add_incredient 설정되어 있을 때 primary key 지우기 위해서는 먼저 자동증감 설정부터 삭제해야 함

두 컬럼을 합쳤을 때 중복이 아니면 무결성의 원칙을 지키는 것이다.

alter table CarCustomer modify  SalesId int;
alter table CarCustomer drop primary key;

 

 

 

 

 

 

 

--------------------P390
--제약조건(무결성) : 잘못된 값이 데이터로 사용되는 것을 못하게 하는 것 
--(5대 제약조건)
--NOT NULL (NULL값 허용 X)
--UNIQUE (중복 X)
--PRIMARY KEY (= NOTNULL + UNIQUE)
--FOREIGN KEY
--CHECK

--EMP,DEPT
INSERT INTO EMP
VALUES (1111,'aaa','MANAGER',9999,sysdate,1000,null,50);

----p362 not null
--NOT NULL은 NULL데이터를 허용하지 않는 제약 조건
DROP TABLE EMP02;

CREATE TABLE EMP02(
EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10) NOT NULL,
JOB VARCHAR2(9),
DEPTNO NUMBER(2)
);

SELECT * FROM EMP02;

--오류발생
INSERT INTO EMP02
VALUES (NULL,NULL,'MANAGER',30);

INSERT INTO EMP02
VALUES (1111,'리미','MANAGER',30);

INSERT INTO EMP02
VALUES (2222,'홍길동','MANAGER',30);

INSERT INTO EMP02
VALUES (NULL,'짱짱','MANAGER',20);

INSERT INTO EMP02
VALUES (2222,'멍멍','MANAGER',10);

DELETE FROM EMP02;

--UNIQUI 데이터의 중복을 허용하지 않음(NULL제외)

DROP TABLE EMP02;
 --두개이상의 제약조건도 허용한다. 중복은 제거, NULL은 받지않음
CREATE TABLE EMP02(
EMPNO NUMBER(4) NOT NULL UNIQUE,
ENAME VARCHAR2(10) NOT NULL,
JOB VARCHAR2(9),
DEPTNO NUMBER(2)
);

--PRIMARY KEY 는 NOTNULL과 UNIQUE의 성질을 다 가지고 있다 
--NULL 데이터를 허용하지 않는다.

CREATE TABLE EMP02(
EMPNO NUMBER(4) PRIMARY KEY,
ENAME VARCHAR2(10) NOT NULL,
JOB VARCHAR2(9),
DEPTNO NUMBER(2)
);

--제약조건 명 지정 : CONSTRAINT
CREATE TABLE EMP02(
EMPNO NUMBER(4) CONSTRAINT EMP02_EMPNO_PK PRIMARY KEY,
ENAME VARCHAR2(10) CONSTRAINT EMP02_ENAME_NN NOT NULL,
JOB VARCHAR2(9),
DEPTNO NUMBER(2)
);

 

'oracle' 카테고리의 다른 글

Foreign Key(외래키)  (0) 2022.10.25
순위함수(ROW_NUMBER, DENSE_RANK,RANK)  (0) 2022.10.25
1021_인덱스  (0) 2022.10.25
TCL (Transaction Control Language, 트랜잭션 제어 언어)  (0) 2022.10.25
1021_ DQL(Data Query Language, 질의어)  (0) 2022.10.25