database 생성
테이블 설계하기 - workbench 사용
user 테이블
AI : auto increase
VARCHAR() 괄호 안의 숫자는 mySQL에서 문자 수를 의미하는 것이었다.
board 의 id_board를 기본키로 하는 외래키를 user 테이블에 넣었다.
작성자가 어떤 게시물들을 작성했는지 알 수 있다. 1:N 관계.
board 테이블
제목, 내용, 조회수와 좋아요 수를 표현할 수 있게끔 컬럼을 넣었다.
NN: not null
NN을 을 하면 저장공간이 절약된다고하여 되도록 대부분의 컬럼에 적용했다.
name_tag : 해시태그 이름을 참조하는 외래키 N:M의 관계
id_user : 작성자를 표시하기 위해 user테이블의 id를 참조하는 외래키. 1:N 의 관계.
hashtag 테이블
한개의 게시물에는 여러개의 해시태그가 포함 될 수 있고, 해시태그도 여러개의 게시물을 포함할 수 있어야 한다.
해시태그와 게시물 간의 관계는 N:M 이므로, 검색해본 결과 JOIN 테이블을 만들기로 하였다.참고자료 : https://hanamon.kr/관계형-데이터베이스-설계-관계-종류/
board_hashtag 테이블은 tag의 name과 board의 id를 참조하기 위해 만든 조인 테이블이다.
C는 Create, R은 Read, U는 Update, D는 Delete의 약자이며, 네 가지 기능은 DB의 본질이다.
CREATE DATABASE database_name;
USE database_name; # 데이터베이스 사용
CREATE TABLE table_name(
필드명 타입
필드명 타입
PRIMARY KEY(필드명)
); # 데이터 컬럼의 이름과 자료형을 입력하여 테이블을 생성
INSERT INTO
# 생성한 데이터베이스에 레코드를 추가할 때 사용할 수 있음.
INSERT INTO table_name(field1, field2, field3)
VALUES(data1, data2, data3);
SELECT * FROM topic; # topic 테이블의 모든것(*)을 출력해줌
SELECT 속성1, 속성2, 속성3 FROM topic;
# topic 테이블에서 속성 1-3 만 선택해서 출력해줌
[WHERE | GROUP BY | ORDER BY]
SELECT field1,field2,field3 FROM topic WHERE field1='something';
#field1이 'something'인 레코드값들을 찾아서 field1-3 출력해줌
SELECT field1 FROM topic WHERE field1='something' ORDER BY DESC LIMIT 2;
#ORDER BY DESC, ASC로 내림차순, 오름차순 정렬가능
#LIMIT n 을 사용해서 검색되는 데이터가 너무 많을 때 제한을 걸 수 있다
UPDATE 테이블 SET assignment_list # 혹은 속성1= 바꿀값 과 같이
[WHERE where_condition] # 어디에 수정을 할 것인지
value:
{expr | DEFAULT}
assignment:
col_name = value
assignment_list:
assignment [, assignment] ...
DELETE FROM 테이블이름
WHERE 조건
#레코드 한 줄 전체 말고, 속성1에 해당하는 값1개만 삭제할 수는 없을까?
#- NULL 값으로 만드는 것은 가능할 것 같다.
Foreign 키를 쓰면 다른 테이블의 기본키를 참조하기 때문에
다음과 같은 무결성 제약조건에 합적하기 때문에 정합성을 강제하고 싶을 때 사용한다고 한다.
하지만 쓰지 않아도 되다는 의견은 이렇다.
만약 데이터베이스가 너무 커서 용량정리의 목적으로 기본키가 포함된 A의 레코드를 지운다고 했을 때, 사라진 레코드를 참조하는 외래키는 존재할 수 없을 것이다. 그러나 외래키가 포함된 레코드가 없어지면 안될 경우가 존재하기 때문에 그냥 그때그때 관리를 한다는 것이다.
WHERE 은 SELECT 문에서 조건에 해당하는 값을 찾아내기 위해서 사용한다.
SELECT * FROM 테이블명
WHERE 컬럼명 IN (값1, 값2, 값3);
# IN은 WHERE절 내에서 여러개 특정값에 해당하는 레코드들을 선택한다.
# OR 연산자로 값을 하나 하나 연결해서 표현할 수도 있지만 길어진다.
# 다른 조건 연산자로 AND, OR, BETWEEN A AND B, IS NULL/NOT NULL, LIKE (%,_)
https://brownbears.tistory.com/180
TCL은 데이터베이스를 서버에 올리고 관리하는 과정에서 트랜잭선 별로 제어하는 명령어를 말한다고 한다.
COMMIT, ROLLBACK 등이 있다.