-
2023 - 06 - 22 SQL (MySQL), 관계형 데이터베이스 (RDB), 비관계형 데이터베이스 (NoSQL)Today I Learned/TIL 06 2023. 6. 22. 01:03
데이터베이스
데이터를 잘 저장하고 잘 찾기위해 만들어진 소프트웨어
database management system (DBMS)
관계형 데이터베이스 (RDB) relational database
데이터 형식이 정해져있고, 데이터끼리 관계를 맺어 모순이 없는 데이터를 유지할수 있도록 도움
mySQL 등이 대표적이다. (스키마가 있고, 관계가 있다)
비관계형 데이터베이스 (NoSQL) non relational database
관계형 데이터베이스에 속하지 않는 모든 데이터베이스. 데이터 형태가 고정되어있지 않고 유연하게 확장할수있다
하지만 저장되는 데이터를 제대로 관리하지 않으면 데이터베이스에 저장된 데이터를 신뢰할수 없다.MongoDB등이 대표적이다.
테이블 형식이 자유로운 비관계형 데이터베이스와는 달리, 관계형 데이터베이스는 '테이블'이라는 개념이 존재하며, 테이블을 이용해 엑셀과 같은 형태로 데이터를 관리해서 우리가 원하는 위치에 데이터를 쌓을 수 있다.
SQL (Structured Query Language)
SQL을 이용해 MySQL의 데이터베이스 조작해보기
SQL = 데이터베이스에서 사용되는 생성, 삽입, 조회 명령문을 SQL (Structured Query Language) 라고 한다.
SQL을 이용해서 끊임없이 변하는 내용들을 지속적으로 삽입, 수정, 삭제, 조회가 가능하다.
SQL의 종류
1. DDL (Data Definition Language)
2. DML (Data Manipulation Language)
3. DCL (Data Control Language)
(1) DDL (Data Definition Language)
데이터를 정의할 때 사용하는 언어로, 데이터베이스나 테이블을 생성, 수정, 삭제시 사용1 생성 : (DATABASE, TABLE, VIEW, INDEX 등을 생성할 때)
https://dev.mysql.com/doc/refman/8.0/en/create-database.html
생성 (DATABASE, TABLE, VIEW, INDEX 등을 생성할 때) CREATE DATABASE 데이터베이스명; CREATE TABLE 테이블명 { 컬럼명 컬럼속성 }
실제 만들어보기
[1] 데이터베이스 생성 (DB명 : NodeJS)
New Query 누르고 CREATE DATABASE NodeJS; 우클릭 후 Run MySQL Query
[2] 테이블 생성 (테이블명 : courses)
CREATE TABLE IF NOT EXISTS courses ( => 테이블을 생성한다 (이 테이블이 존재하지 않을 때만) id bigint(5) NOT NULL AUTO_INCREMENT, => 각각 id, title, tutor라는 컬럼을 만든다 title varchar(255) NOT NULL, => title과 tutor는 varchar라는 255글자의 문자열타입을 생성한다 tutor varchar(255) NOT NULL, => not null = 빈값이 존재해서는 안된다 PRIMARY KEY (id) ); 우클릭 후 Run MySQL Query
[3] 테이블 조회 (테이블명 : courses)
DESC courses; 현재 테이블에 대해 조회한다 우클릭 후 Run MySQL Query
[4] 데이터 삽입 (title, tutor 컬럼을 포함하는 courses 테이블의 행 2개 삽입)
INSERT INTO courses (title, tutor) VALUES => title, tutor 두개의 컬럼에 아래 데이터를 넣는다 ('Spring 기초반', '최원빈'), => 실제 넣는 데이터는 VALUES 뒤에 온다 ('Spring 숙련반', '최원빈'), => 넣는 내용은 각각 (타이틀, 튜터) 순으로 기입한다 ('React 기초반', '김예지'), ('React 숙련반', '김예지'), ('Node.js 기초반', '이용우'), ('Node.js 숙련반', '이용우'), ('웹개발 종합반', '이범규'), ('웹개발 종합반 플러스', '이범규'); 우클릭 후 Run MySQL Query
[5] 테이블 조회 (courses의 전체 테이블 조회)
SELECT * FROM courses; 우클릭 후 Run MySQL query
[6] 테이블 조건부 조회 (courses의 선택된 컬럼만 조회)
SELECT * FROM courses WHERE tutor='이용우'; => tutor 이름이 이용우만 조회 SELECT title, tutor FROM courses; => title, tutor 컬럼만 조회
예시
1. name, age 라는 열(Column)을 가진 users 라는 테이블을 만들기 CREATE TABLE IF NOT EXISTS users ( userId int(11) NOT NULL AUTO_INCREMENT, // AUTO_INCREMENT => 값을 1씩 올려준다 name varchar(255) NOT NULL, // int 정수타입, varchar 문자열 타입 age int (255) NOT NULL, PRIMARY KEY (userId) ); 2. 나의 이름과 나이 데이터를 삽입해보기. INSERT INTO users (name, age) VALUES ('이상우', 30); 3.users 테이블을 조회해보기. SELECT * FROM users;
2 삭제 (DATABASE, TABLE, VIEW, INDEX 등을 삭제할 때)https://dev.mysql.com/doc/refman/8.0/en/drop-table.html
DROP DATABASE 데이터베이스명; DROP TABLE 테이블명;
3 변경 (DATABASE, TABLE 등의 속성을 변경할 때)https://dev.mysql.com/doc/refman/8.0/en/alter-database.html
ALTER DATABASE 데이터베이스명 변경조건; ALTER TABLE 테이블명 ADD 변경조건; ALTER TABLE 테이블명 DROP 변경조건; ALTER TABLE 테이블명 MODIFY 변경조건; ALTER TABLE 테이블명 RENAME 변경조건; ...
(2) DML (Data Manipulation Language)
DML(Data Manopulation Language)은 데이터베이스에 데이터를 조작할 때 사용하는 언어로 데이터의 저장, 삭제, 수정, 조회와 같은 행위
조회 : 가장많이 사용하는 명령어, 테이블에서 데이터 조회시 사용https://dev.mysql.com/doc/refman/8.0/en/select.html
SELECT 컬럼목록 FROM 테이블명 [WHERE 조건];
삽입 : 테이블에 새로운 데이터들을 삽입할때 사용https://dev.mysql.com/doc/refman/8.0/en/insert.html
INSERT INTo 테이블명 (컬럼목록) VALUES (값목록);
삭제 : 테이블에서 특정 조건에 맞는 데이터들을 삭제할때 사용https://dev.mysql.com/doc/refman/8.0/en/delete.html
DELETE FROM 테이블명 [WHERE 조건];
수정 : 테이블에서 특정한 조건에 맞는 데이터들을 수정할때 사용https://dev.mysql.com/doc/refman/8.0/en/update.html
UPDATE 테이블명 SET 컬럼 = 값 [WHERE 조건];
(3) DCL (Data Control Language)
DCL(Data Control Language)은 데이터베이스에 대한 권한과 관련된 문법으로 특정 유저가 DB에 접근할 수 있는 권한을 설정할 때 사용
커밋 : 데이터베이스의 작업이 정상적으로 완료되었음을 관리자에게 알려줄 때 사용합니다.https://dev.mysql.com/doc/refman/8.0/en/commit.html
START TRANSACTION; ... COMMIT;
롤백 : 데이터베이스의 작업이 비정상적으로 완료되었음을 관리자에게 알려줄 때 사용합니다.https://dev.mysql.com/doc/refman/8.0/en/commit.html
START TRANSACTION; ... ROLLBACK;
그랜트 : 데이터베이스의 특정한 유저에게 사용 권한을 부여할 때 사용합니다.https://dev.mysql.com/doc/refman/8.0/en/grant.html
GRANT [권한] ON 객체명 TO 사용자;
리보크 : 데이터베이스의 특정한 유저에게 사용 권한을 취소할 때 사용합니다.https://dev.mysql.com/doc/refman/8.0/en/revoke.html
REVOKE [권한] ON 객체명 FROM 사용자;
관계형 데이터베이스, 비관계형 데이터베이스에 대한 개념
트랜젝션에 대한 개념
https://jerryjerryjerry.tistory.com/48
'Today I Learned > TIL 06' 카테고리의 다른 글
2023 - 06 - 24 시퀄라이즈 (Sequelize), ORM, RDBMS (0) 2023.06.24 2023 - 06 - 23 SQL 제약조건 - 쿼리문 기본 키 (Primary Key), 외래 키 (Foreign Key), Null, Unique 고유제약조건 (1) 2023.06.23 2023 - 06 - 21 엑세스 토큰 (Access Token)과 리프레쉬 토큰 (Refresh Token) (0) 2023.06.21 2023 - 06 - 20 JWT (Json Web Tokens) (0) 2023.06.20 2023 - 06 - 19 쿠키 (Cookie)와 세션 (Session) (0) 2023.06.19