이번 주차에 mysql의 방식으로 프로그램을 구현하면서, 알아야 할 것과 공부해야 할 분량이 많이 늘어났다. mysql의 설치부터 기본문법까지 익히느라 정신 없었지만, 내 분량이라도 끝내기 위해서 물어보고 또 물어보고 직접 해 보기까지 어려운 일들을 많이 겪었다. 다른 단어로 표현하자면, 내 파트만 끝내기 위해서 시간을 보냈기 때문에, 미처 다른 팀원들이 mysql의 방식으로 어떻게 프로그램을 짰는지, 이해도가 많이 부족하기도 했다. 그래서 오늘은 나중을 대비해서 sequelize 및 mysql에 대해 간략히 정리해보고자 한다.
npx sequelize init
npx sequelize db:create
name에 설정한 Post로 exports 하기때문에 저 이름으로 꼭 require로 할 수 있도록 참고 하자!!!
- 추가 수정 사항
- moduels의 기본값들 수정 할 부분 있으면 수정하고
- migrations의 파일도 수정 해준다.
npx sequelize db:migrate
op를 사용하면 or 와 and 연산자를 중첩하여 사용해서 AND/OR 조건을 만들어 낼 수 있음.
const { Op } = require("sequelize");
brew install mysql
HomeBrew 패키지 관리자를 사용하지 않을 경우👇
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
mysql.server start
mysql_secure_installation # 기본 설정 시작
비밀번호 복잡도 검사 과정 No
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD PLUGIN can be used to test passwords and improve securitNy. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No:
루트 비밀번호 설정
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD PLUGIN can be used to test passwords and improve securitNy. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No:
익명 사용자 삭제 여부 Yes
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) :
test 데이터베이스 삭제 여부 No
By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
변경된 권한 테이블에 적용 Yes
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :
mysql 서버가 재부팅과 상관없이 켜져있도록
brew services start mysql
mysql -u root -p
u
사용자 아이디 명시(여기서는 root 사용자)p
비밀번호를 직접 입력하겠다는 옵션# 비밀번호 변경 mysql > use mysql; mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''; mysql > FLUSH PRIVILEGES;
pip install mysqlclient # Django와 연결
DATABASE 관련 명령어
SHOW DATABASES;
SHOW DATABASES
를 통해 현재 mysql 서버에 있는 database 들을 볼 수 있습니다.
USE [database_name];
USE
명령어를 통해 사용할 데이터베이스를 지정할 수 있습니다.사용할 데이터베이스를 한 번 지정한 이후에 실행되는 모든 SQL문은 지정한 데이터베이스에서 실행됩니다.workbench에서는 명령어를 사용하는 대신 메인의 왼쪽 아래에 있는schemas
에 있는 데이터베이스를 더블클릭하여 선택할 수도 있습니다.
SHOW TABLES; SHOW TABLE STATUS;
SHOW TABLES
를 통해서 현재 선택한 데이터베이스에 있는 table들을 조회할 수 있습니다.SHOW TABLE STATUS
를 통해서 현재 선택한 데이터베이스의 있는 table들을 조회할 수 있고, 해당 table들과 관련한 상세 정보들을 함께 출력합니다.
DESCRIBE [table_name]; DESC [table_name];
DESCRIBE
명령어를 통해서 해당 table이 가진 column들을 반환합니다. 열은 곧 테이블에서 속성 정보를 나타냅니다. 축약형으로DESC
라고 입력하여도 됩니다.
SELECT
SELECT ... SELECT * FROM [table_name] // 전체 열 SELECT [column_name] FROM [table_name] // 특정 열 SELECT [column_name],[column_name] FROM [table_name] // 복수의 열
SELECT
명령어를 통해서 table에서 데이터를 가져올 수 있습니다.SELECT * FROM ...
를 입력하면from
이하에 있는 table에서 해당하는 모든 데이터를 가져와서 볼 수 있습니다.
- 대신 컬럼명을 입력하여서 전체 데이터 대신 특정 컬럼의 데이터만 가져와서 볼 수 있습니다.
WHERE
... WHERE ... SELECT * FROM Customers WHERE age > 20;
WHERE
명령어를 통해 조회하는 데이터 결과에 특정 조건식을 적용하여 필터링할 수 있습니다. 테이블에서 가져온 전체 데이터 중에WHERE
이하의 조건에 맞는 데이터들만 결과로 가져와서 출력하기 때문에,WHERE
조건문의 범위가 아주 넓거나 조건문 자체가 없으면, 데이터의 크기가 크면 클 수록 데이터를 찾아오는 데에 더 큰 노력과 시간이 소요됩니다.SELECT * FROM Customers WHERE age > 20; AND age < 50; SELECT * FROM cities WHERE country != South Korea OR country <> North Korea // <> === != SELECT * FROM goods WHERE goods_id_number IN (12,56,235)
위와 같이
WHERE
는 여러가지 연산자들을 조합하여 다양한 조건식들을 만들어낼 수 있습니다. 적용할 수 있는 연산자는 아래와 같습니다.
- OR 연산자와 AND 연산자
- 조건연산자 (<,>,=, >=, <=, <> ,!= 등)
- 관계 연산자 (NOT, OR, AND, IN)
Sub-Query
... WHERE [something] = ( SELECT [something] FROM [table_name] WHERE ... ) SELECT * FROM City WHERE CountryCode = ( SELECT CountryCode FROM City WHERE Name = 'Seoul' )
Sub Query
는 조건문 안에 조건문을 넣을 때에 사용하며, 위와 같은 방법으로 중복된 조건식을 사용할 수 있습니다. 첫 조건식WHERE
의 대상과 서브쿼리 내의 SELECT 대상은 같아야합니다.
LIKE
... LIKE '[string]%' ... LIKE '[string]_' SHOW variables LIKE 'char%' SELECT * FROM City WHERE CountriesCode LIKE 'KO_' SELECT * FROM City WHERE Name LIKE 'Addis%'
LIKE를 통해 문자열의 내용을 이용하여 검색할 수 있습니다.
%
와_
두 가지를 활용할 수 있습니다.
[string]%
는[string]
이후에 어떠한 문자가 오든, 찾는 대상에[string]
이 있는 값을 보여줍니다.%
이후에 어떠한 것이 오든 앞의 문자열만 만족한다면 결과로 출력합니다.[string]_
은%
와 비슷하지만,%
와는 달리 length가 1, 즉 한 글자만 매치시키기 위해 사용합니다.
DISTINCT
SELECT DISTINCT CountryCode FROM City
SELECT
를 수행할 때DISTINCT
를 추가하면 결과에서 중복된 값들이 있다면 이들 중 1개만을 출력합니다. 결과로 받는 데이터가 중복되는 값이 많을 때나 데이터의 크기가 클 때에 유용합니다.
ORDER BY
ORDER BY [something] DESC||(ASC) SELECT * FROM Country ORDER BY Population DESC SELECT * FROM City ORDER BY Population ASC // default로 오름차순으로 설정되었기에 생략가능
ORDER BY
를 통해 결과값을 특정 컬럼에 따라서 오름차순/내림차순으로 정렬하여 결과값이 나오는 순서를 조절할 수 있습니다. 기본적으로 오름차순으로 정렬되어 있으며, 따라서 오름차순 정렬 명령인ASC
를 생략할 수 있습니다. 내림차순으로 정렬할 시에는DESC
를 사용합니다.
LIMIT
LIMIT [number] SELECT * FROM UserData ORDER BY age LIMIT 100
LIMIT
구문은 결과값의 상위 N 개 만을 한정하여 출력하고 싶을 때에 사용하며, 서버의 처리량을 많이 사용하는 쿼리문을 개선할 때에 많이 사용하는 구문입니다.