테이블이란?
- 데이터베이스의 기본적인 데이터 저장 단위
- 데이터베이스 테이블은 사용자가 접근 가능한 모든 데이터를 보유하며 레코드와 컬럼으로 구성된다.
- 테이블은 시스템내에서 독립적으로 사용되길 원하는 엔티티를 표현할 수 있다.
-> 테이블 내에 있는 외래키(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 | 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 KEY와 UNIQUE로 지정해줘야 한다
-> 제약조건 : 중복데이터 허용 불가
-> 한글로 된 이름: 논리 데이터 (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 KEY를 BUYNO 라인에 안하고 맨 마지막에 추가!
);
> 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 테이블이 있다.
-> DROP TABLE BUYTBL; 을 하면 현재 mydb의 데이터베이스에 member, prodbtl,usertbl 테이블이 남아 있다.
'멀티캠퍼스 풀스택 과정 > 데이터베이스' 카테고리의 다른 글
데이터베이스3-3 테이블의 제약조건(primary key, foreign key) (0) | 2022.01.20 |
---|---|
데이터베이스3-2 테이블의 관리(ALTER) (0) | 2022.01.20 |
데이터베이스2-6 트랜잭션, SAVEPOINT와 ROLLBACK TO (0) | 2022.01.19 |
데이터베이스2-5 JDBC로 JAVA와 DB의 연동(DELETE문) (0) | 2022.01.19 |
데이터베이스2-4 JDBC로 JAVA와 DB의 연동(UPDATE문) (0) | 2022.01.19 |