<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
https://sql-factory.tistory.com/1345
2개 이상의 다중 컬럼으로 기본키 지정하기
사용이유 :
ex)
1. 외래키로 지정한 같은 사람(CustomerId) 이 같은 (CarId) 차를 구매할 수 있지만, 학생으로 보았을 때 같은 학생이 같은 수업을 동시에 듣는다는 것은 데이터 오류.
-> 따라서 외래키이자 기본키로 설정해서 중복 될 수 없게 한다.
2. 이렇게 되면 같은 사람이 같은 차를 두 대 살 수 없는 제한 발생
-> 구매날짜 혹은 수강 날짜를 중복되지 못하게 함으로써 오류를 줄여간다.
- 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 |