본문 바로가기
멀티캠퍼스 풀스택 과정/데이터베이스

데이터베이스3-1 테이블의 생성, 복사, 삭제

by 이쟝 2022. 1. 19.

테이블이란?

- 데이터베이스의 기본적인 데이터 저장 단위

- 데이터베이스 테이블은 사용자가 접근 가능한 모든 데이터를 보유하며 레코드와 컬럼으로 구성된다.

- 테이블은 시스템내에서 독립적으로 사용되길 원하는 엔티티를 표현할 수 있다.

-> 테이블 내에 있는 외래키(Foreign key)는 두 엔티티 사이의 관계를 표현하는 데 사용된다.

 

컬럼: 테이블의 각 컬럼은 엔티티의 한 속성을 표현 (ROW 레코드): 테이블의 데이터는 행에 저장됨

 

테이블 생성시 제한사항과 고려할 점

 

테이블 이름과 컬럼은 항상 알파벳 문자로 시작해야 하고
A-Z까지의 문자, 0~9까지의 숫자 그리고 $,#,_(underbar)를 사용할 수 있다.(공백 사용 불가능)
테이블의 컬럼 이름은 30자를 초과할 수 없고, 예약어를 사용할 수 없다.
오라클 테이블 한 계정안에서 테이블 이름은 다른 테이블 이름과 달리 유사해야 한다.
한 테이블 안에서 컬럼 이름은 같을 수 없으며 다른 테이블에서의 컬럼 이름과는 같을 수 있다.

 


 

데이터 정의언어: DDL(Data Definition Language)

- 데이터베이스의 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로(생성, 변경, 삭제, 이름변경) 데이터 구조와 관련된 명령어들을 말한다.

 

SQL 내용
CREATE 데이터베이스 객체를 생성한다.
DROP 데이터베이스 객체를 삭제한다.
ALTER 기존에 존재하는 데이터베이스 객체를 다시 정의하는 역할을 한다.
RENAME 기존에 존재하는 테이블명을 변경한다.
TRUNCATE 테이블 또는 테이블의 지정된 파티션에서 모든 행을 제거한다.

 


1. 데이터 타입

- 테이블을 생성할 때 각 컬럼에 지정할 수 있는 데이터 타입

 

1) 정수형

 

-> 보통 쓰는 건 INT(M),  INT(M) 음수 ~ 양수 / INTEGER 양수만

 

2) 고정소수점형

 

 

-> DECIMAL(M, D) 15, 2 -> 12.xx

 

3) 날짜형

 

 

4) 문자형

 

 

CHAR 고정길이, 개수가 정해진 데이터에 좋음 ex) 성별
VARCHAR 가변길이, 유동적인 사이즈를 가지고있는 데이터
쓰고 남은 메모리를 반환(메모리 활용도에서는 가변길이가 좋음
숫자를 지정해주지 않으면 기본적으로 45바이트 할당


2. 테이블의 생성

 

 

schema 테이블의 소유자
table_name 테이블 이름
column   컬럼의 이름
datatype 컬럼의 데이터 유형
TABLESPACE 테이블이 데이터를 저장할 테이블스페이스를 지정한다.

 

 

<테이블 생성 예시>

 

테이블명 member
논리데이터 번호 이름 연락처 이메일 생년월일 성별 등록일
물리데이터 num username tel email birth gender registerdate
데이터타입
(자릿수)
int varchar(30) varchar(15) varchar(50) date char(1) datetime
null 허용여부 not null not null not null null null not null not null
기본값(default)           F now()
자동번호설정 auto_increment            
제약조건 primary key            

 

-> 자동번호설정 : auto-increment (자동으로 1부터 증가하는 값을 입력해준다), PRIMARY KEYUNIQUE로 지정해줘야 한다

-> 제약조건 : 중복데이터 허용 불가

-> 한글로 된 이름: 논리 데이터 (DB에 실제로 만들어지는 필드명이 아님)

-> 실제로 데이터베이스에 생성되는 데이터: 물리데이터

-> 연락처는 구분자(-) 필수!! 최소한 14자리 이상! 0505-1234-5678

-> date는 자릿수 없음!

 

> USE DEMO;

> SHOW DATABASES;

> CREATE DATABASE MYDB;

 

위에서 설계해 놓은 데이터를 쿼리문으로 변경

 

> CREATE TABLE member(                 -- 필드명  데이터타입 제약조건 기본값check

    num int auto_increment primary key,  -- primary not null이 자동이어서 안 적어도 됨

    username varchar(30) not null,

    tel varchar(15) not null,

    email varchar(50), -- null 생략 가능

    birth date,

    gender char(1) default 'M',  -- 성별을 안 넣으면 무조건 M으로 들어감

    registerdate datetime default now()

);

 

> SHOW TABLES;

> DESC MEMBER;

더보기

 

-> 물리데이터 생성!(mydb 데이터베이스의  MEMBER 테이블 생성)

 

 

예제1) 회원테이블 만들기

 

 

더보기

> CREATE TABLE USERTBL(

    USERID VARCHAR(30) PRIMARY KEY,

    USERNAME VARCHAR(30) NOT NULL,

    BIRTH INT NOT NULL,  -- INT 말고 YEAR도 가능(년도만 쓴다면)

    LOCAL VARCHAR(10) NOT NULL,

    MOBILE VARCHAR(3),

    MODILE2 VARCHAR(10),

    HEIGHT INT(3),

    WRITEDATE DATETIME

);

 

> DESC USERTBL;

 

 

-> 물리데이터 생성!(mydb 데이터베이스의 USERTBL 테이블 생성)

 

예제2) 제품 테이블 생성하기

 

 

더보기

> CREATE TABLE PRODTBL(

    PRODUCTNAME VARCHAR(100) PRIMARY KEY,

    PRICE INT DEFAULT 0,

    OPENDATE DATETIME,

    COMPANY VARCHAR(50),

    STOCK INT DEFAULT 0

);

 

> DESC PRODTBL;

 

 

-> 물리데이터 생성!(mydb 데이터베이스의 PRODTBL 테이블 생성)

 

예제3) 구매 테이블 생성하기

 

 

더보기

> CREATE TABLE BUYTBL(

    BUYNO INTEGER AUTO_INCREMENT,  -- 양수만 나올 것 같아서 INTEGER로 설정

    USERID VARCHAR(30) NOT NULL,

    PRODUCTNAME VARCHAR(30) NOT NULL,

    GROUPNAME VARCHAR(30) NOT NULL,

    PRICE INT DEFAULT 0,

    AMOUNT INT DEFAULT 0,

    BUYDATE DATETIME DEFAULT NOW(),

    PRIMARY KEY(BUYNO)  -- PRIMARY KEYBUYNO 라인에 안하고 맨 마지막에 추가!

);

 

> DESC BUYTBL;

 


3. 기존 테이블의 복사

 

- 기존 테이블을 부분, 또는 완전히 복사할 때 서브쿼리를 가진 CREATE TABLE 명령어를 사용해서 쉽게 테이블을 복사할 수 있다.

- 하지만 제약 조건, 트리거, 테이블 권한은 새로운 테이블로 복사되지 않는다.

- 제약조건은 NOT NULL 제약조건만 복사된다.

 

 

* 기존에 있는 테이블에서 select한 결과를 가지고 새로운라는 테이블을 생성한다*

> CREATE TABLE emp2 AS SELECT empno, ename, job, sal FROM emp WHERE job = 'MANAGER';

더보기

-> emp라는 테이블에서 empno, ename, job, sal이라는 필드를 가져와서 emp2라는 새로운 테이블을 생성하는데 조건이 job이 매니저이여야만 한다.

> SHOW tables;

> SELECT * FROM emp2;


3. 테이블의 삭제

 

 

> SHOW TABLES;

> DROP TABLE BUYTBL;  (아까 위에서 만들었던 테이블 중 한 개 임의로 설정)

더보기

 

-> 현재 mydb의 데이터베이스에 buytbl, member, prodtbl, usertbl 테이블이 있다. 

 

&amp;nbsp;

-> DROP TABLE BUYTBL; 을 하면 현재 mydb의 데이터베이스에 member, prodbtl,usertbl 테이블이 남아 있다.