3-tier : 클라이언트, 서버, 데이터베이스
1️⃣ 접속
mysql -u root -p'비번' (short option)
mysql —user root —password='비번' (long option)
mysql -u root -p비번 (제일 짧은 형식)
2️⃣ DB생성
show databases; (데이터베이스를 보여달라)
create database mydb; (mydb라는 이름을 가진 데이터베이스 생성)
show databases; (만든 거 확인)
3️⃣테이블 생성
create table mytable (firstName text, lastName text);
select database(); 하면 NULL 이라고 뜸.
ctrl+d 눌러서 나가기
mysql -u root -p비번 mydb;
select database(); 하면 mydb가 뜸.
create table mytable (firstName text, lastName text); (mytable이라는 이름의 테이블 생성)
show tables;
select * from mytable; 하면 empty set이라고 뜸.
insert into mytable (firstName, lastName) values ('Hello', 'Kim');
select * from mytable; (테이블 안에 내용 보기)
💡 \h create user 치면 도움말(명령어 list)
💡 GRANT ALL ON mydb.* TO user; → 모든 것에 대한 모든 권한을 user에게 줌
💡 ctrl+d 는 나가기 (가끔 ctrl+c)
👉 생성한 테이블의 속성(?)을 보고 싶을 때 : describe mytable;
👉 특정 데이터베이스 안에서 작업 원할 때 :
use 데이터베이스명; (database changed라고 뜨면 정상)
show tables;
SELECT * FROM Persons WHERE LastName BETWEEN 'Hansen' AND 'Pettersen' (includes)
SELECT * FROM Persons WHERE LastName>'Hansen' AND LastName<'Pettersen' (X includes)
INSERT INTO Persons (lastName) VALUES ( 'Jimmy')
→ Persons라는 테이블의 lastName column에 Jimmy 라는 데이터를 넣고 싶다
UPDATE Persons SET lastName='Nilsen' WHERE lastName='Hansen'
→ Hansen을 Nilsen으로 변경
DELETE FROM Persons WHERE firstName='Peter'
→ Persons라는 테이블의 firstName이 Peter인 애들 삭제
SHOW는 db나 table 목록을 보여줌
table의 내용을 보려면 select
delete from mytable where firstName='Red';
delete from mytable; 전체내용 삭제
select * from mytable left (outer) join mytable2 on mytable.firstName=mytable2.firstName;
⇒ mytable은 왼쪽에 다 나오고, mytable2중에서 mytable과 firstName일치하는 애들만 오른쪽에 출력
select * from mytable right (outer) join mytable2 on mytable.firstName=mytable2.firstName;
⇒ mytable2는 오른쪽에 다 나오고, mytable중에서 mytable2와 firstName일치하는 애들만 왼쪽에 출력
select lastName, count(lastName) from mytable group by lastName;
⇒ 동일한 lastName 몇개 있는지 보여줌
💡 join = inner join
💡 join ⛔️ outer join
💡 outer join은 left, right 로 나뉘어짐
💡 left outer join = left join
client: 우리가 사용하는 node.js
server: database (여기서 db 이름은 learnmysql)
시작 전, vscode terminal에서 npm install mysql, npm install dotenv 설치해야 한다.
(mysql 모듈과 dotenv 모듈 설치하여 database와 정해진 모듈 rules 이용해 쉽게 소통하기 위해)
(📌 mysql은 오래된 버전이라 mysql2 설치 추천.
mysql로 이미 설치완료했다면, mysql -u root -p비번 learnmysql
에 접속 후, alter user 'root'@'localhost' identified with mysql_native_password by '비번';
)
성공적으로 설치 되었다면 terminal통해 learnmysql 접속해서 database 만들어주고 sprint 시작하기.
Pt3- table의 뼈대를 생성해줌 (schema-설계도)
Pt4,5- query 사용하여 table에서 추가,삭제,조회 등
SELECT * FROM table -> table의 모든 column을 보여줘
SELECT name, title FROM table -> table의 name, title column만 보여줘
(WHERE로 조건을 별도 지정하지 않았을 때, 기본적으로 row는 0~n까지 다 보여주게끔 설정되어 있다.)
SELECT 표시할column AS 표시할column의새이름 FROM table1 JOIN table2 ON table1.id=table2.userId WHERE table1.name='DuriCha';
👉ON 일치조건 (table1.id=table2.userId)
👉WHERE 조건에 일치하는 결과물 중 표시할 정보 (table1.name='DuriCha')
... table1 JOIN table2 ON 조건;
👉 JOIN은 table1과 2를 가로로 붙여준다 (ON을 쓰지 않을 시, 모든 조합이 나옴(경우의수)- 쓸모X) (ON 뒤에는 항상 조건이 붙어야 한다. ON으로 끝나면 X)
NULL 사용시 '=' 쓰지 않는다.
is null / is not null 로 사용.
COUNT(column명) 👉 column에 몇개 있는지 세줌
COUNT(1) 👉 record(data)의 갯수만큼 무조건 세줌 (1은 true니까)
...table1 LEFT JOIN table2 : 왼쪽은 다 나옴 (table1의 data는 일치여부 상관없이 다 나옴)
...table1 RIGHT JOIN table2 : 오른쪽은 다 나옴 (table2의 data는 일치여부 상관없이 다 나옴)
JOIN 은 왜 쓰는가 ?
1대 다: FOREIGN KEY 로 그냥 표현하면 됨
다대 다 : FOREIGN KEY 로 표현불가. sprint의 'content_category' table은 실질적 data는 없는데, 다대다 표현하기 위해 존재 -> content와 category 연결해주는 table일 뿐.
SELECT 기준column, aggregate function GROUP BY 기준column 👉 group by 뒤에 나오는 기준column과 select 뒤의 기준column은 동일해야 한다. aggregate function은 집계함수로, count()가 이에 포함된다.