티스토리 뷰
데이터 타입
데이터타입 | 설명 | |
숫자 데이터 타입 | SMALLINT | 정수형 데이터 타입 (2byte) |
INT | 정수형 데이터 타입 (4byte) | |
BIGINT | 정수형 데이터 타입 (8byte) 무제한 수 표현 가능 | |
FLOAT(p) | 부동 소수형 데이터 타입(4byte) 소수점 아래 7자리까지 | |
문자 데이터 타입 | CHAR(n) | 고정 길이 문자형 (1~255 byte) |
VARCHAR(n) | 가변 길이 문자형 (1~65,535 byte) | |
LONGTEXT | 대용량 문자열 데이터 타입 | |
LONGBLOB | 대용량 바이너리(2진법) 데이터 타입, 동영상 같은 거 | |
날짜/시간 데이터 타입 | DATE | 날짜 데이터 타입 YYYY-MM-DD |
DATETIME | 날짜/시간 데이터 타입 YYYY-MM-DD HH:MM:SS |
char(10) <= xyz : 10자리 중 3글자를 저장, 7자리가 남음 - 작업을 빨리 해서 성능 우수, 공간낭비가 있다.
varchar(10) <= xyz : 들어오는 문자열의 길이에 따라 변함, 3만큼만 저장 - 공간효율 우수 (권장)
제약조건
제약조건 유형 | 설명 |
NOT NULL | - 컬럼에 NULL값이 들어오는 걸 막음 - 사번, 이름, 주민번호, 전화번호등의 필수 컬럼에 선언 - 데이터 타입 몰라서 모두 다 들어올 수 있음 * null값 : 모르는 값, 정의되지 않은 값으로 0(숫자)과 공백(문자)과는 다른 특수한 값 |
UNIQUE | - 중복되지 않는 유일한 값을 입력해야 하는 제약조건 - 주민번호, 전화번호, 메일 등 고유한 값이 필요한 컬럼에 선언 |
PRIMARY KEY | - 기본키 제약조건으로 NOT NULL + UNIQUE 성격 모두 가진 제약조건 (NN UK를 동시에 가진 것 중에 고르는 느낌) - PK 제약조건이 선언된 컬럼엔 null값이나 중복된 값이 입력될 수 없음 - PK 제약조건은 테이블 당 한번만 선언 가능(대표) - 사번, 학번, 회원/제품번호 등의 컬럼에 사용(개인적인 건 보안상의 문제로 제외) |
FOREIGN KEY | - 외래키 제약조건으로 특정 테이블에서 다른 테이블을 참조하는 제약조건 - FOREIGN KEY 제약조건 때문에 테이블과 테이블이 연결됨 |
CHECK | - 컬럼이 만족해야하는 조건문을 지정하는 제약조건 |
테이블 생성
create table 테이블명
(컬럼명1 데이터타입(컬럼사이즈),
컬럼명2 데이터타입(컬럼사이즈));
create table test1
(id int,
name varchar(10),
start_date date,
phone varchar(20));
-- describe로 확인
desc test1;
테이블명 : members
컬럼명 | member_id | member_name | birth | job | phone |
데이터타입 | int | varchar | date | varchar | varchar |
컬럼사이즈 | - | 8 | - | 20 | 20 |
제약조건 | PK | NN | NN | - | UK |
create table members
(member_id int primary key,
member_name varchar(8) not null,
birth date not null,
job varchar(20),
phone varchar(20) unique key);
desc members;
테이블명 : products
컬럼명 | prod_id | prod_name | price | make_date | company |
데이터타입 | int | varchar | int | date | varchar |
컬럼사이즈 | - | 20 | - | - | 10 |
제약조건 | PK | NN | CK (price > 0) | - | NN |
create table products
(prod_id int primary key,
prod_name varchar(20) not null,
price int check (price > 0),
make_date date,
company varchar(10) not null);
desc products;
check는 괄호 안에 조건문 넣어야함 (좌변 =(비교연산자) 우변) 형태
테이블명 : orders
컬럼명 | order_num | member_id | prod_id | order_date |
데이터타입 | int | int | int | date |
컬럼사이즈 | - | - | - | - |
제약조건 | PK | FK | FK | - |
Default값 | - | - | - | now() |
select now()
from dual;
create table orders
(order_num int,
member_id int,
prod_id int,
order_date datetime default now(),
primary key(order_num),
foreign key(member_id) references members(member_id),
foreign key(prod_id) references products(prod_id));
desc orders;
order_num int primary key, < column level 문법 > 한 칸 띄우고 제약조건 : not null 선언 시 필수(많이 씀)
밑에 따로 제약조건 선언 < table level 문법 > : foreign key 선언 시 필수
foreign key 뒤에는 부모 테이블과 부모 컬럼명을 넣어야 함(references)
테이블 생성 Review 및 추가 속성
AUTO_INCREMENT 속성 : 1부터 시작해서 1씩 증가하는 값을 반환하는 속성
- 시작/증가 값 변경하고 싶은 경우, 테이블 생성 후 테이블 수정 구문 (alter table)로 변경 가능
- 숫자 데이터 타입에 프라이머리 또는 유니크 타입이어야 함
- null 값을 지정하면 자동으로 값이 입력
테이블 생성 시 auto_increment 속성 선언 문법
creat table 테이블명
(컬럼1 int auto_increment primary key,
컬럼2 데이터타입,
컬럼3 데이터타입);
create table stu20
(stu_id int auto_increment primary key,
stu_name varchar(5) not null,
age int check (age > 19));
desc stu20;
- 테이블 생성 후 auto_increment 입력값(시작값) 변경 (default = 1)
문법) SQL> alter table 테이블명 auto_increment=입력값;
- 증가값 변경 (default =1)
문법) SQL> set @@auto_increment_increment=증가값;
- 현재 몇 번까지 사용됐는지 확인하는 방법
문법) SQL> select last_insert_id();
select now() 만 써도 됐었는데 from dual;을 안 붙이면 오류뜨기도 했다. 왜 그런지 찾아봐야겠음.
'배운 것 기록 > DB' 카테고리의 다른 글
[MySQL] 데이터조회 - 비교 연산자 (0) | 2022.05.09 |
---|---|
[MySQL] 데이터 수정 update, 삭제 delete (0) | 2022.05.05 |
[MySQL] 데이터 삽입 insert (0) | 2022.04.28 |
[MySQL] 데이터베이스 관련 용어, 구축 절차, 생성 (0) | 2022.04.25 |
[MySQL] DB, SQL (0) | 2022.04.24 |