on
MySQL - 터미널 관련 명령어/DB CRUD 명령어/컬럼 옵션
MySQL - 터미널 관련 명령어/DB CRUD 명령어/컬럼 옵션
데이터베이스란?
지금까지는 데이터를 서버 메모리에 저장함 → 서버를 재시작하면 데이터도 사라져버림 → 영구적으로 저장할 공간 필요
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 같이 업데이트
from http://cloud-cuckoo-land.tistory.com/79 by ccl(A) rewrite - 2021-12-19 22:00:57