[Oracle] 테이블 삭제(DROP)와 기본키(PRIMARY KEY)

당당·2023년 4월 28일
0

Oracle

목록 보기
8/51

https://opentutorials.org/course/3885/26355

📔설명

지금까지 읽기, 쓰기, 삭제, 조회를 했다.

이번에는 기본키에 대해서 알아보자!

그전에!

https://m.blog.naver.com/c6369/220728980464

set linesize 수;


이때까지 불편하게 새로로 보이던 것을, linsize를 200으로 설정해줘서 그래도 한줄에 테이블처럼 보이게 했다!


🔒식별자와 기본키

topic 테이블의 id컬럼은 식별자, 즉 남과 나를 구별하는 역할을 한다.

식별자가 되기위한 가장 중요한 특징은 중복되면 안된다.

이전에 지웠던 id=3인 데이터를 다시 추가하려 한다고 하자.

그런데, id로 구분하려는데 이전에 topic테이블에 id가 3인 행이 있는지 없는지 알기는 매우 까다롭다.

그래서, 만약 id가 3인 행이 있다면 insert문 실행을 하지 않고, 없을 때만 실행을 시켜 준다면, id값이 유니크한 식별자라는 것을 확신할 수 있다.
이 역할을 해주는 것이 PRIMARY KEY이다.

우리가 이전에 작성했던 topic테이블 생성 코드에는 기본키지정 코드가 없다.

CREATE TABLE topic(
	id NUMBER NOT NULL,
	title VARCHAR2(50) NOT NULL,
	description VARCHAR2(4000) NULL,
	created DATE NOT NULL
);

기본키를 생성하는 방법은 ALTER를 통해 추가하거나 테이블 생성시에 지정해주는 두가지 방법이 있다.

하지만, 테이블 생성시에 미리 지정하는 것이 제일 좋은 방법이다.


🪔테이블 삭제

먼저, 기존 topic 테이블을 없애버리자. 그래야 새로운 topic 테이블을 생성할 수 있으니까!

테이블 삭제 형식

DROP TABLE 테이블명;

DDL다음은 commit명령어는 필요없다.


🔑기본키

기본키 지정 형식

기본키 지정 코드를 추가해서 테이블을 생성해보자!

CREATE TABLE 테이블명(
	컬럼명 데이터타입 [NULL|NOT NULL], 
    컬럼명 데이터타입 [NULL|NOT NULL],
    ...,
    CONSTRAINT 제약조건이름 PRIMARY KEY(컬럼명[,컬럼명,...])
);

위 처럼 제약조건 이름을 지정해줄 수 있고,
아니면

CREATE TABLE 테이블명(
	컬럼명 데이터타입 [NULL|NOT NULL], 
    컬럼명 데이터타입 [NULL|NOT NULL],
    ...,
    PRIMARY KEY(컬럼명[,...])
);

위에 처럼 바로 기본키 지정만 해줄 수도 있다!

topic테이블의 id를 기본키로 지정해보자.

CREATE TABLE topic(
	id NUMBER NOT NULL,
	title VARCHAR2(50) NOT NULL,
	description VARCHAR2(4000) NULL,
	created DATE NOT NULL,
    CONSTRAINT PK_TOPIC PRIMARY KEY(id)
);

CONSTRAINT는 제약조건이라는 의미다. PRIMARY KEY 다음에는 식별자로 지정할 컬럼명을 입력한다!


잘 동작하는지 테스트해보자.

이전에 작성했던 insert문 중 2개를 들고와서 먼저 실행시켜보자.

INSERT INTO topic(id, title, description, created)
VALUES (1,'ORACLE','ORACLE is ...', SYSDATE);

INSERT INTO topic(id, title, description, created)
VALUES (2,'MySQL','MySQL is ...', SYSDATE);

commit을 꼭 하자!

여기서, 세번째 행을 추가할 때 id값을 3이 아니라 1또는 2로 했다고 가정해보자.

INSERT INTO topic(id, title, description, created)
VALUES (1,'SQL Server','SQL Server is ...', SYSDATE);

실행시키면..

무결성 제약 조건 위배했다는 오류가 뜬다!
그러므로, 3으로 수정해서 넣자!

where절에 기본키를 넣어서 검색하는 것과, 그렇지 않은 경우의 속도 차이는 인덱스때문에 매우 크다.
(기본키에는 자동으로 인덱스가 지정되니까..)

profile
MySQL DBA 신입

0개의 댓글