Database
Database 개념과 기본 명령어
방감자
2024. 5. 17. 17:17
DBMS
= database management system
- 관계형 데이터베이스 RDB
서로 관계를 가진 데이터들의 집합
글쓴이 - 게시글 두 테이블이 1:n 관계를 가지고 있음
Mysql, Oracle, MariaDB, Postgres
- 비관계형 데이터베이스 NoSQL
관계형 데이터베이스의 문법을 SQL이라 하는데 이를 쓰지 않는 데이터베이스
RDB에 비해 비정형화된 데이터베이스 (테이블, 행, 열 등 처럼 구조화 x)
비정형화됨에 따라 성능이 올라감
Redis, MongoDB
MariaDB
mysql를 fork하여 만들어졌음 (*fork : 그대로 copy)
SQL문 - RDB에서 CRUD를 하기 위해 사용되는 언어 혹은 문법
- DB구축시 3가지 작업이 필요 (sql문을 3가지로 분류)
- DDL문을 활용하여 테이블 구축 (*DDL: Data Definition Language)
테이블 생성,구조 변경, 삭제 CREATE, ALTER, DROP
- DML문을 사용하여 데이터 삽입조회수정삭제(*DML: Data Manipulation Language)
- DCL문을 활용하여 DB사용자 관리 (*DCL: Data Control Language)
데이터베이스 용어
스키마 : 데이터베이스
테이블 : 행과 열로 구조화된 자료 집합
행, 열 :
테이블에서 가로,세로 방향의 자료 집합
키 primary key : 한 행을 구별할 수 있도록 식별자로 이용되는 열
값이 유일해야하며 null값일 수 없다 = unique, not null
외래키 foreign key : 연관된 두 테이블을 연결하는데 사용되는 열
- 외래키가 설정되면, post테이블 데이터의 생성, 삭제, 수정에 대해 제약이 발생한다 만약 author_id에 not null 조건이 있다면 author에 없는 데이터는 post에 생성불가
- pk fk 은 인덱스가 생성된다..
- 인덱스는 조회의 성능을 높이기 위한 별도 페이지라 이해하면 될 것
데이터베이스 명령어
-- 데이터베이스 접속
mariadb -u root -p
-- 도커를 통해 접속
docker exec -it my_mariadb mariadb -u root -p
-- 스키마(database) 목록 조회
show databases;
-- 스키마(database) 생성
create DATABASE board;
-- 데이터베이스 선택
use board;
-- 테이블 조회
show tables;
-- author 테이블 생성
create table author(id INT PRIMARY KEY, name VARCHAR(255), email VARCHAR(255), password VARCHAR(255));
-- 테이블 컬럼 조회
describe author;
-- 컬럼 상세 조회
show full columns from author;
-- 테이블 생성문 조회
show create table author;
-- posts 테이블 생성
-- foreign key(author_id) references author(id) 테이블 차원의 foreign key, 제약조건 author 의 id를 침조
create table posts(id int primary key, title varchar(255), content varchar(255), author_id int, foreign key(author_id) references author(id));
-- 테이블 index 조회
show index from author;
show index from posts;
-- ALTER문 : 테이블의 구조를 변경
-- 테이블 이름 변경
alter table posts rename post;
-- 테이블 컬럼 추가
alter table author add column test1 varchar(50);
alter table author add column address varchar(255);
-- 테이블 컬럼 삭제
alter table author drop column test1;
-- 테이블 컬럼명 변경
alter table post change column content contents;
-- 테이블 컬럼 타입과 제약조건 변경, 컬럼이 아래 변경 사항으로 덮어쓰기
alter table author modify column email varchar(255) not null;
alter table post modify column title varchar(255) not null;
alter table post modify column contents varchar(3000);
-- 테이블 삭제
drop post;
-- insert into : 데이터 삽입
insert into 테이블명(컬럼1, 컬럼2, 컬럼3) values(데이터1, 데이터2, 데이터3);
insert into author(id, name, email) values(1,'eunji','eunji@test.com');
insert into posts(id, title, content, author_id) values(1,'제목','내용',1);
-- select : 데이터 조회, * : 모든 컬럼 조회
select * from author;
-- 테이블 제약 조건 조회
-- information_schema의 key_column_usage라는 컬럼 중 table_name이 posts인 것을 조회
select * from information_schema.key_column_usage where table_name = 'posts';
insert into author(id, name, email,password,address) values(2, hong, hong@naver.com,1234,1234);
insert into author(id, name, email,password,address) values(2, 'hong', 'hong@naver.com','1234','1234');
-- update 테이블명 set 컬럼명=데이터 where 조건;
-- 덮어쓰기 x, 지정 속성만 변경
-- where문을 빠뜨리게 될 경우, 모든 데이터에 update문이 적용됨에 유의
update author set name = abc, email='abc@test.com' where id=1;
update author set email='abc2@test.com' where id=2;
-- delete from 테이블명 where 조건;
-- where문이 생략 될 경우, 모든 데이터에 delete문이 적용됨에 유의
-- 실무에서는 delete를 거의 사용하지 않는다 데이터를 영구히 삭제하지 않고 DEL_YN 사용함
delete from author where id=5;
-- select문의 다양한 조회 방법
select * from author;
select * from author where id=1;
select * from author where id>2;
select * from author where id>2 and name=bang;
-- 특정 컬럼만을 조회할때
select name, email from author where id=3;
-- 중복제거하고 조회하기
select distinct title from post;
-- 정렬 : order by, 데이터의 출력 결과를 특정 기준으로 정렬
-- 정렬 조건 없이 조회할 경우, pk를 기준으로 오름차순 정렬
-- asc :오름차순, desc: 내림차순
select * from author order by name asc;
-- multi order by : 여러 컬럼으로 정렬
-- 먼저 쓴 컬럼 우선 정렬, 그다음 정렬 옵셥 적용
select * from post order by title;
select * from post order by title, id desc;
-- limit number 특정 숫자로 결과값 개수 제한
select * from author order by id desc limit 1;
-- alias(별칭)을 이용한 select : as 키워드 사용
select name as 이름, email as 이메일 from author;
select a.name as 이름, a.email as 이메일 from author as a;
-- null을 조회조건으로
select * from post where author_id is null;
select * from post where author_id is not null;