오늘 내가 배운 것
1. DATABASE (데이터베이스)
- DBMS
- RDBMS
2. SQL
- 데이터 정의어 (DDL)
- 데이터 조작어 (DML)
- 데이터 제어어 (DCL)
3. sql 파일 내보내고 불러오기
- sql - backup
출처 : https://www.stechies.com/differences-between-dbms-rdbms/
DATABASE (데이터베이스)
데이터베이스(DB: database)는 통합하여 관리되는 데이터의 집합체를 의미한다.
중복된 데이터를 없애고, 자료를 구조화하여, 효율적인 처리를 할 수 있도록 관리한다.
그래서, 여러 업무에 여러 사용자가 데이터 베이스를 사용할 수 있다.
DBMS
- DataBase Management System
데이터베이스 관리시스템, SQL을 이용하여 누군가에게 데이터를 허용할지 안 할지를 설정하거나, 데이터를 조작할 수 있다.
RDBMS
- Relational DataBase Management System
관계형 데이터베이스 관리시스템, 데이터 베이스 안에서 데이터들 사이의 관계성을 가지는 데이터들을 다루며, 이 데이터를 테이블형태로 저장한다.(테이블 기반의 DBMS)
대표 플랫폼(프로그램)
관계형 데이터베이스 대표적인 플랫폼(프로그램)
- Oracle
- Mysql
- MariaDB
- PostgreSQL
- Mssql
비관계형 데이터베이스 대표적인 플랫폼(프로그램)
- MongoDB
- xml
SQL
- Structured Query Language
DBMS에서 구현된 기능을 실행시키기 위한 특정 언어, 데이터를 보관, 저장, 삭제, 수정을 할 수 있다.
문법
mysql -u root -p
#사용할 수 있는 접속 상태가 된다.
myspl > [SQL 문법];
명령어 뒤에 세미콜론 필수!!
안쓰면 -> 가 뜨는데 이어서 쓴다는 내용이다.
; 하고 다시 enter 누르면 된다.
SQL 문법에서 명령어는 대문자로 사용하는 것이 암묵적인 룰이다.
변수 같은 건 소문자로 쓴다.
SQL 분류
- 데이터 정의어 (DDL)
- 데이터 조작어 (DML)
- 데이터 제어어 (DCL)
1. 데이터 정의어 (DDL)
- CREATE
- SHOW : 필드 내용을 보는 것.
- DROP
- ALTER
- USE : 폴더에 들어감
CREATE TABLE store(
category VARCHAR(50),
store_name VARCHAR(50),
price VARCHAR(50),
tel VARCHAR(50),
address VARCHAR(50)
);
ALTER TABLE store RENAME TO store2;
SHOW TABLES;
+----------------+
| Tables_in_baek |
+----------------+
| store2 |
+----------------+
ALTER TABLE store2 RENAME TO store;
DESC store;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| category | varchar(50) | YES | | NULL | |
| store_name | varchar(50) | YES | | NULL | |
| price | varchar(50) | YES | | NULL | |
| tel | varchar(50) | YES | | NULL | |
| address | varchar(50) | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
Field Type
숫자형
- INT : 용량이 적다(4byte) : -21억~+21억
문자형
- CHAR : 255byte : 고정데이터
- VARCHAR : 255byte : 가변데이터
- TEXT : 65535byte
- 고정과 가변의 차이
고정 : 성별 - 남자 or 여자
가변 : 주소
날짜형
- DATE : 년월일
- TIME : 시간
- DATETIME :년월일 시간 (yyyy-mm-dd HH:MM:SS) 8byte
- TIMESTAMP : 년월일 시간(interger) 4byte
- YEAR
- 이진데이터타입*
- BLOB : 이미지
key
- PRIMARY KEY : 중복 입력불가, null 안됨, 테이블당 하나만 넣을 수 있다.
- UNIQUE : 중복 입력 불가, null 가능
자동생성
- AUTO_INCREMENT : 1씩 자동 생성
CREATE TABLE user(
user_id varchar(50) PRIMARY KEY,
user_pw varchar(50) NOT NULL,
user_name varchar(50) NOT NULL,
gender char(4) DEFAULT '남자',
register_date DATETIME DEFAULT now()
);
객체형으로 나오고 그걸 테이블로 저장한다.
2. 데이터 조작어 (DML)
- SELECT
- INSERT
- UPDATE
- DELETE
INSERT, SELECT
INSERT INTO [테이블명](필드1, 필드2, ....) values ('string','string'...)
INSERT INTO user(user_id, user_pw, user_name, gender)
values('web7722', '1234', '백', '남자');
-- 확인 : SELECT
SELECT [필드명] FROM [테이블명]
-- 확인:
DESC user;
+---------------+-------------+------+-----+-------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+-------------------+-------------------+
| user_id | varchar(50) | NO | PRI | NULL | |
| user_pw | varchar(50) | NO | | NULL | |
| user_name | varchar(50) | NO | | NULL | |
| gender | char(4) | YES | | 남자 | |
| register_date | datetime | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+---------------+-------------+------+-----+-------------------+-------------------+
5 rows in set (0.00 sec)
-- 선택한것이 4개여서 4개만 보이는 것이고 다 보기 위해선 필드값을 다 적으면 된다.
SELECT user_id, user_pw, user_name, gender FROM user;
+---------+---------+-----------+--------+
| user_id | user_pw | user_name | gender |
+---------+---------+-----------+--------+
| web7722 | 1234 | 백 | 남자 |
+---------+---------+-----------+--------+
SELECT user_id, user_pw, user_name, gender, register_date FROM user;
+---------+---------+-----------+--------+---------------------+
| user_id | user_pw | user_name | gender | register_date |
+---------+---------+-----------+--------+---------------------+
| web7722 | 1234 | 백 | 남자 | 2022-12-22 11:20:42 |
+---------+---------+-----------+--------+---------------------+
-- 중복값 넣어보기
INSERT INTO user(user_id, user_pw, user_name, gender)
-> values('web7722', '1234', '백', '남자');
ERROR 1062 (23000): Duplicate entry 'web7722' for key 'user.PRIMARY'
-- 모든 내용을 보고 싶을 때
SELECT * FROM user;
+---------+---------+-----------+--------+---------------------+
| user_id | user_pw | user_name | gender | register_date |
+---------+---------+-----------+--------+---------------------+
| web7722 | 1234 | 백 | 남자 | 2022-12-22 11:20:42 |
+---------+---------+-----------+--------+---------------------+
INSERT INTO user(user_id, user_pw, user_name, gender)
values ('admin', '1234', '관리자', '남자');
SELECT * FROM user;
+---------+---------+-----------+--------+---------------------+
| user_id | user_pw | user_name | gender | register_date |
+---------+---------+-----------+--------+---------------------+
| admin | 1234 | 관리자 | 남자 | 2022-12-22 11:31:50 |
| web7722 | 1234 | 백 | 남자 | 2022-12-22 11:20:42 |
+---------+---------+-----------+--------+---------------------+
where 절
SELECT * FROM user WHERE user_id='admin';
UPDATE
UPDATE user SET gender='여자' WHERE user_id='admin';
SELECT * FROM user WHERE user_id='admin';
UPDATE user SET user_pw='0000', user_name='슈퍼관리자', gender='남자' WHERE user_id='admin';
DELETE
DELETE FROM user WHERE user_id='admin';
SELECT * FROM user;
3. 데이터 제어어 (DCL)
- GRANT
- REVOKE
연습
데이터베이스에 데이터 저장하기
1. 게시판 테이블 만들기
CREATE TABLE board(
idx INT(11) AUTO_INCREMENT PRIMARY KEY,
subject VARCHAR(150) NOT NULL,
content TEXT NULL,
writer VARCHAR(50) NOT NULL,
registerDate DATETIME NOT NULL DEFAULT now(),
hit INT(11) default 0
);
2. row 5개 만들기
INSERT INTO board(subject,content,writer) values('가나다', '1234', '관리자1');
INSERT INTO board(subject,content,writer) values('라마바', '1234', '관리자2');
INSERT INTO board(subject,content,writer) values('사아자', '1234', '관리자3');
INSERT INTO board(subject,content,writer) values('차카타', '1234', '관리자4');
INSERT INTO board(subject,content,writer) values('파하가', '1234', '관리자5');
+-----+-----------+---------+------------+---------------------+------+
| idx | subject | content | writer | registerDate | hit |
+-----+-----------+---------+------------+---------------------+------+
| 1 | 가나다 | 1234 | 관리자1 | 2022-12-22 12:03:31 | 0 |
| 2 | 라마바 | 1234 | 관리자2 | 2022-12-22 12:03:31 | 0 |
| 3 | 사아자 | 1234 | 관리자3 | 2022-12-22 12:03:31 | 0 |
| 4 | 차카타 | 1234 | 관리자4 | 2022-12-22 12:03:31 | 0 |
| 5 | 파하가 | 1234 | 관리자5 | 2022-12-22 12:03:34 | 0 |
+-----+-----------+---------+------------+---------------------+------+
SQL파일 백업 및 불러오기
1. MySQL 종료상태 (mysql -> zsh)
exit
2. .sql 파일 만들기 (zsh)
mysqldump -u[계정명] -p [데이터베이스명] > backup.sql
Enter password: [sql비밀번호]
mysqldump -uroot -p baek > backup.sql
Enter password: [sql비밀번호]
3. MySQL 접속 (mysql)
mysql -uroot -p
Enter password: [sql비밀번호]
4. D/B 생성
CREATE DATABASE baek2
5. .sql파일 불러오고 확인하기
SOURCE ./backup.sql
SELECT * FROM board;
+-----+-----------+---------+------------+---------------------+------+
| idx | subject | content | writer | registerDate | hit |
+-----+-----------+---------+------------+---------------------+------+
| 1 | 가나다 | 1234 | 관리자1 | 2022-12-22 12:03:31 | 0 |
| 2 | 라마바 | 1234 | 관리자2 | 2022-12-22 12:03:31 | 0 |
| 3 | 사아자 | 1234 | 관리자3 | 2022-12-22 12:03:31 | 0 |
| 4 | 차카타 | 1234 | 관리자4 | 2022-12-22 12:03:31 | 0 |
| 5 | 파하가 | 1234 | 관리자5 | 2022-12-22 12:03:34 | 0 |
+-----+-----------+---------+------------+---------------------+------+
5 rows in set (0.00 sec)
종료하기 전에 있었던 내용을 확인할 수 있다.
'시작 > TIL(Today I Learned)' 카테고리의 다른 글
221226~230102 Express Project (0) | 2023.01.03 |
---|---|
221223 - Node Express - Cookie, cookieParser() (0) | 2022.12.24 |
221221 - JavaScript - Promise() (0) | 2022.12.21 |
221220 - Node Express - Router 객체를 이용한 라우팅 분리 (0) | 2022.12.21 |
221219 - Node Express를 이용한 CRUD 게시판 만들기 (0) | 2022.12.19 |
댓글