MySQL
테이블 (데이터 입력, 생성, 제약사)
햄발자
2024. 6. 5. 17:10
테이블
MySQL에서 테이블(table)은 데이터를 저장하는 기본적인 단위입니다.
테이블은 열(column)과 행(row)으로 이루어져 있으며, 각 열은 데이터 유형을 나타내는 데이터 형식(data type)을 가지고 있습니다.
데이터베이스에서 테이블에서 포함 가능한 정보
- 테이블 이름
- 열 이름
- 열 데이터 형식
- 빈 값 허용 여부
- 기본값
- 제약 조건 (Primary Key, Unique Key, Foreign Key 등)
- 인덱스
SQL (Structured Query Language)은 데이터베이스 관리 시스템 (DBMS)에서 데이터를 관리하고 검색하기 위해 사용되는 표준 데이터베이스 언어입니다. (안시 쿼리)
create database mydb;
use mydb;
-- 테이블 생성
create table student(
student_id int,
name varchar(50) not null,
grade int not null,
major varchar(50) not null
);
select * from student;
desc student;
-- 과목 테이블 생성
create table subject(
subject_id int,
subject_name varchar(50) not null,
credit int not null,
department varchar(5),
professor char(50) not null
);
select * from subject;
데이터 베이스 생성
CREATE DATABASE [database_name];
CREATE DATABASE mydb;
데이터 입력
-- 데이터 입력 하기
/*
insert into usertbl(userName, birthYear, addr, mobile)
values ('이승기', 1987, '서울', '011-111-1111');
insert into usertbl(userName, birthYear, addr, mobile)
values ('김경호', 1971, '전남', '019-333-3333');
*/
insert into usertbl(userName, birthYear, addr, mobile)
values ('이승기', 1987, '서울', '011-111-1111'),
('김경호', 1971, '전남', '019-333-3333'),
('윤종신', 1969, '경남', ''),
('임재범', 1963, '서울', '011-222-2222'),
('은지원', 1978, '경북', '011-444-4444'),
('조관우', 1965, '경기', '011-555-5555'),
('김범수', 1987, '경남', '011-111-1111'),
('조용필', 1987, '경기', '011-111-1111'),
('바비킴', 1987, '서울', '011-111-1111'),
('성시경', 1987, '경남', null);
desc usertbl;
select * from usertbl;
-- usertbl 이승기 사람 조회 해보자.
-- 다른 테이블 삭제 하고자 하는 테이블을 참조 하고 있다면
-- 테이블 삭제가 바로 안된다. (굳이 삭제하고 싶다면 참조 테이블을 먼저 삭제 해야 한다)
-- drop table buytbl;
-- drop table usertbl;
-- delete 데이터를 삭제 하는 명령어 이다.
-- delete from usertbl;
select * from usertbl;
insert into buytbl(userName, prodName, price, amount)
values ('김범수', '운동화', 30, 2),
('김범수', '노트북', 1000, 1),
('조용필', '모니터', 200, 1),
('바비킴', '모니터', 200, 5),
('김범수', '청바지', 50, 3),
('바비킴', '메모리', 80, 10),
('성시경', '책', 15, 5),
('은지원', '책', 15, 2),
('은지원', '청바지', 50, 1),
('바비킴', '운동화', 30, 2),
('은지원', '책', 15, 1),
('바비킴', '운동화', 30, 2);
select * from buytbl;
-- 홍길동은 현재 userTBL 테이블에 존재 하지 않는 값이다.
-- 그래서 buytbl row 값으로 들어 올 수 없다. (제약 때문에)
insert into buytbl(userName, prodName, price, amount)
values ('홍길동', '운동화', 30, 2);
-- 특정 데이터를 조회 하고 싶다면 --> 필터를 건다 (WHERE)
select * from usertbl WHERE userName = '이승기';
select * from buytbl where userName = '김범수';
제약 조건 추가
기본키를 추가하면 해당 열에 대한 중복 데이터가 저장될 수 없으며, 데이터 검색 속도가 향상됩니다. 기본키는 테이블 내에서 고유한 값이어야 하며, 해당 열에 대해 NOT NULL 제약 조건이 설정되어 있어야 합니다.
desc student;
-- 이미 생성된 테이블에 기본 키 추가 하는 쿼리 사용방법
ALTER TABLE student ADD PRIMARY KEY(student_id);
-- 사전기반지식 : 특정 컬럼을 기본키로 만들게 되면 중복된 데이터를 허용 못하고
-- NULL 값이 있어서는 안됨
-- 먼저 쿼리구문 작성해보기
-- subject 테이블에 PK 추가 대상 - sbject_id
-- 제약 확인
ALTER TABLE subject ADD PRIMARY KEY(subject_id);
desc subject;
DESC 명령어는 특정 테이블의 구조(스키마) 정보를 출력하는 명령어입니다. DESC는 DESCRIBE 의 약어로, 테이블의 구조 정보를 보다 간략하게 확인할 수 있도록 지원하는 명령어입니다.
PK 추가
-- 테이블을 삭제하는 명령어 확인
DROP TABLE student;
DROP TABLE subject;
-- 학생 테이블 생성 PK 추가
CREATE TABLE student(
student_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
grade INT NOT NULL,
major VARCHAR(50) NOT NULL
);
desc student;
CREATE TABLE subject(
subject_id INT PRIMARY KEY,
subject_name VARCHAR(50) NOT NULL,
credit INT NOT NULL,
department VARCHAR(10) NOT NULL,
professor VARCHAR(20) NOT NULL
);
desc subject;
MySQL에서 가장 많이 사용하는 데이터 타입
- 숫자 타입: INT, BIGINT, FLOAT, DOUBLE 등
- 문자열 타입: VARCHAR, CHAR, TEXT, BLOB 등
- 날짜/시간 타입: DATE, TIME, DATETIME, TIMESTAMP 등
- 불리언 타입: BOOLEAN, BOOL 등
- 데이터 타입은 테이블의 컬럼에 저장될 데이터의 형식을 결정하므로, 정확한 데이터 타입을 선택하는 것이 중요하다.
- 이를 통해 데이터베이스의 성능을 최적화하고, 데이터 무결성을 보장할 수 있다.
- 숫자 타입은 정수형(INT, BIGINT)과 실수형(FLOAT, DOUBLE)으로 구분된다
- 정수형은 소수점 이하의 값을 저장하지 않으며, 실수형은 소수점 이하의 값을 저장할 수 있다.
- 문자열 타입은 고정 길이(CHAR)와 가변 길이(VARCHAR)로 구분됩니다. 고정 길이는 저장할 데이터의 길이가 일정하며, 가변 길이는 저장할 데이터의 길이가 가변적이다.
- 날짜/시간 타입은 날짜(DATE), 시간(TIME), 날짜와 시간(DATETIME, TIMESTAMP) 등으로 구분된다.
- 불리언 타입은 참(TRUE, 1)과 거짓(FALSE, 0) 두 가지 값을 저장할 수 있다
- EXT는 대부분의 문자열 데이터를 저장하는 데 사용됩니다
- BLOB는 이진 데이터를 저장하는 데 사용됩니다. 최대 크기는 TEXT와 동일하지만, TEXT는 문자 집합(Character Set)과 관련된 처리를 합니다. BLOB은 이진 데이터로 간주되어 문자 집합에 영향을 받지 않습니다.
-- 예약어는 기본적으로 테이블 이름을 선점할 수없다.
-- 하지만 강제적으로 `` 작은 따옴표를 사용해서 테이블 이름이라고 명시할 수 있다.
create table `order`(
id int primary key,
price bigint,
cusotmer_order varchar(50),
product_name varchar(20) not null,
quantity int not null,
order_date date not null
);
desc `order`;
-- 도전 과제 : 위 형식에 맞는 insert 구문을 만고 실행 하세요.
-- 도전 과제 : 위 형식에 맞는 insert 구문을 만고 실행 하세요.
INSERT INTO `order` (id, price, cusotmer_order, product_name, quantity, order_date)
VALUES (2, 15000, 'or123', '청바지', 3, '2024---05-30'); // date (값 확인)
select * from `order`;