728x90
데이터베이스란?
지금까지는 데이터를 서버 메모리에 저장함 → 서버를 재시작하면 데이터도 사라져버림 → 영구적으로 저장할 공간 필요
MySQL 관계형 데이터베이스 사용
- 데이터베이스: 관련성을 가지며 중복이 없는 데이터들의 집합
- DBMS: 데이터베이스를 관리하는 시스템
- RDBMS: 관계형 데이터베이스를 관리하는 시스템
- 서버의 하드 디스크나 SSD 등의 저장 매체에 데이터를 저장
- 서버 종료 여부와 상관 없이 데이터를 계속 사용할 수 있음
- 여러 사람이 동시에 접근할 수 있고, 권한을 따로 줄 수 있음
관련 명령어
맥 터미널 기준
brew 통한 MySQL 설치
$ brew install mysql
MySQL 서버 시작
$ brew services start mysql
MySQL 설정
$ mysql_secure_installation
MySQL 접속
$ mysql -u root -p
MySQL 종료
exit
MySQL 서버 종료
$ brew services stop mysql
brew 통한 workbench 설치
$ brew install —cask mysqlWorkbench
데이터 베이스 생성
mysql> CREATE SCHEMA 이름 DEFAULT CHARACTER SET utf8;
데이터 베이스 사용
mysql> use 이름;
DB table 보기
mysql> show databases;
DB table 생성 확인
mysql> DESC users;
table 삭제
mysql> DROP TABLE users;
table 목록
mysql> SHOW TABLES;
DB CRUD 명령어
CREATE
INSERT INTO (컬럼) VALUES (값)
mysql> INSERT INRO nodejs.users (name, age, married, comment) VALUES (’zero’, 24, 0, ‘자기소개1’);
READ
SELECT (컬럼) FROM (테이블)
mysql> SELECT * FROM nodejs.users;
→ 모든 컬럼 조회
mysql> SELECT (컬럼1, 컬럼2) FROM nodejs.users;
→ 지정 컬럼 조회
WHERE 조건
## AND : 여러가지 조건을 동시에 만족하는 것을 찾음
### SELECT 컬럼1, 컬럼2 FROM 테이블 WHERE 조건1 AND 조건2;
mysql> SELECT name, age FROM nodejs.users WHERE married = 1 AND age > 30;
→ 결혼 했고, 30살 이상인 name, age의 값을 조회
## OR : 여러가지 조건 중 하나 이상을 만족하는 것을 찾음
### SELECT 컬럼1, 컬럼2 FROM 테이블 WHERE 조건1 OR 조건2;
mysql> SELECT id, name FROM nodejs.users WHERE married = 0 OR age > 30;
→ 결혼 안 했거나, 30살이상인 name, age의 값을 조회
ORDER BY : 특정 컬럼 값 순서대로 정렬 가능
## DESC는 내림차순, ASC 오름차순
mysql> SELECT id, name FROM nodejs.users ORDER BY age DESC;
→ 나이 내림차순으로 테이블 id, name의 값 조회
LIMIT : 조회 개수 제한
mysql> SELECT 컬럼1, 컬럼2 FROM 테이블 ORDER BY 대상컬럼 DESC LIMIT 1;
OFFSET : 앞의 row들 skip 가능 (OFFSET 2 → 3번째 조회)
mysql> SELECT 컬럼1, 컬럼2 FROM 테이블 ORDER BY 대상컬럼 DESC LIMIT 1 OFFSET 1;
UPDATE
UPDATE : 데이터 수정
UPDATE 테이블 SET 컬럼 = 변경값 WHERE 조건
DELETE
DELETE : 데이터 삭제
DELETE FROM 테이블 WHERE 조건
컬럼에 대한 옵션들
INT | 정수 자료형(FLOAT, DOUBLE은 실수) |
VARCHAR | 문자열, 자료형, 가변 길이(CHAR은 고정 길이) |
TEXT | 긴 문자열은 TEXT로 별도 저장 |
DATETIME | 날짜 자료형 저장(날짜 + 시간) |
DATE | 날짜 저장 |
TINYINT | -128에서 127까지 저장하지만 여기서는 1 또는 0만 저장해 boolean 값 표현 |
NOT NULL | 빈 값은 받지 않는다는 뜻(NULL은 빈 값 허용) |
AUTO_INCREMENT | 숫자 자료형인 경우 다음 로우가 저장될 때 자동으로 1 증가 |
UNSIGNED | 0과 양수만 허용(음수 불가능) |
ZEROFILL | 숫자의 자리 수가 고정된 경우 빈 자리에 0을 넣음 ⇒ INT(5) ZEROFILL = 2할당 → 00002 결과값 반환 ⇒ INT(10) ZEROFILL = 1 할당 → 0000000001 결과값 반환 |
DEFAULT now() | 날짜 컬럼의 기본값을 현재 시간으로 |
PRIMARY KEY(컬럼명) | 고유값 |
INDEX | 검색 속도 빨라짐(자주 사용하는 것에 걸어주는게 좋음 - INDEX commenter_idx (commenter ASC) → 작성자 댓글을 오름차순으로 index 한다 - UNIQUE INDEX name_UNIQUE (name ASC)) → 앞에 UNIQUE 가 붙으면 고유값이 된다? → 고유값인지 검색을 자주하기 때문에 UNIQUE 뒤에 INDEX가 붙는다. |
CONSTRAINT | 해당 컬럼에 제약 걸어둠 ⇒ CONSTRAINT commenter |
FOREIGN KEY(컬럼명) | 외래키 |
REFERENCES | 참조 ⇒ REFERENCES nodejs.users (id) → user 테이블의 id 참조 |
ON DELETE CASCADE | 같이 삭제(1번 사용자가 삭제되면 엮인 댓글도 같이 삭제하냐) |
ON UPDATE CASCADE | 같이 업데이트 |
728x90
'IT > Database' 카테고리의 다른 글
Database - SQL vs noSQL (0) | 2021.11.29 |
---|