2022-02-22(화)

Jeongyun Heo·2022년 2월 22일
0

/Users/nana/git/eomcs-docs/sql/Exam01.sql

🔹 뷰(view)

command line 방식으로
명령을 한 줄 입력하는
인터페이스 방식

show tables;

DBMS마다 테이블 조회하는 명령 다름

🔹 제약 조건 조회

use information_schema;

select table_schema, table_name from tables;

select * from TABLE_CONSTRAINTS where table_name='test1';

select table_name, COLUMN_NAME, CONSTRAINT_NAME from KEY_COLUMN_USAGE;

어떤 컬럼이 primary key로 되어 있는지 알아내려면

모든 정보를 다 테이블에 저장
테이블 이름은 어디에 있고
제약 조건은 어느 테이블에 있고
primary key는 어디에 있고
DBMS마다 다름

DESC test1; ← 요약 정보를 보여준 거

SQL 한 줄 당 명령이 자동으로 실행된다

MariaDB [studydb]> select no, name, class from test1 where working='Y';
MariaDB [studydb]> select no, name, class from test1 where working='y';

SQL문을 가상의 테이블로 만들 수 있다

worker 테이블
진짜 테이블 아님
SELECT문의 링크임
실시간으로 실행하는 거임

create view
그 당시 테이블을 따로 보관하는 게 아니라 링크일 뿐이다.

뷰는 SELECT문에 대한 링크이다.
가상 테이블이라고 부르지만

worker에 없는 걸 선택해서 볼 수는 없다

오리지널에 있어도 worker에 없으면 선택 못 함

값이 null이면 자동 증가된 값으로 들어간다.

/Users/nana/git/eomcs-docs/sql/Exam02.sql

select 결과를 테이블에 insert하기

어차피 primary key는 not null

임시 테이블에 넣어놨다가 수동 커밋으로 세팅을 하고 작업을 했어야
오토 커밋

자동 커밋 / 수동 커밋

autocommit=false

클라이언트가 요청을 하면
모든 클라이언트 서버는 이런 식
임시데이터베이스

마지막 commit 상태로 되돌리고 싶다면,
> rollback;

autocommit=false인 상태에서 작업하기
실무에서는 반드시 autocommit=false

MariaDB [studydb]> select @@autocommit;

서버에서는 무조건 멀티 스레딩
클라이언트의 상대는 스레드

값에 대해서도 대소문자 구분 안 함
customerId = customerid

특정 컬럼의 값만 조회할 때 => "프로젝션(projection)"이라 부른다.

mysql에서 제공하는 문자열을 붙이는 함수

mariadb documentation 검색

https://mariadb.com/kb/en/built-in-functions/

https://mariadb.com/kb/en/function-and-operator-reference/

https://mariadb.com/kb/en/concat/

@v : SQL에서 사용하는 변수

https://dev.mysql.com/doc/refman/5.7/en/

https://dev.mysql.com/doc/refman/5.7/en/functions.html

5.7이 mairaDB랑 비슷함

조회하는 컬럼에 별명 붙이기

조건을 지정하여 결과를 선택하는 것을 "셀렉션(selection)" 이라 한다.

실행순서 : from -> where -> select

다음과 같이 null에 != 연산자를 사용하면 조건이 맞지 않는다.

is null
is not null

문자열로 된 걸 날짜로 바꿔서 비교

날짜 함수

https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html

> select datediff(curdate(), '2022-5-2');

날짜에서 특정 형식으로 값을 추출하기

문자열을 날짜 형식으로 바꿔야 됨

문자열 날짜 값으로 바꾸기

as 생략 가능

Spring framework

JDBC가 하는 일은 DBMS에 연결

JDBC를 직접 호출하지 않는다

우리가 하는 거 : SQL, DAO, Servie, Controller

Web Static Resource

com.eomcs.jdbc.ex2

com.eomcs.jdbc.ex2.Exam0110.java

jdbc를 안 쓰고 데이터베이스에 연결할 방법이 없다

hibernate

껍데기 씌우는 게 편하니까
ScoreTableProxy
껍데기에 불과하다
DBMS에 직접 접근하는 방법은 없음

/Users/nana/git/eomcs-docs/sql/Exam04.sql

Foreign Key = 부모 테이블 + 자식 테이블

09-JDBC프로그래밍 / 16 페이지

게시글 테이블
번호, 제목, 내용, 조회수, 작성자

데이터가 중복되는 부분을 분리시킨다

중복 컬럼에 있는 거 분리

파일 번호, 파일명

한 군데만 바꿔주면 됨
그게 바로 데이터 중복을 줄이는 이유

컬럼의 낭비가 없이 깔끔하게 첨부파일을 등록할 수 있다

공학 : 경험적 사실을 학문으로 체계화 시킴으로써 후배들이 좀 더 빠르게 그 기술을 합리적이게 익힐 수 있다.

중복 데이터 없애서 테이블 구조를 바꾸는 것 (제1 정규화)

중복 데이터, 중복 컬럼
제1 정규화

테이블 구조를 개선
=> DB모델링

참조하는 쪽이 자식 테이블

FK : 다른(외부) 테이블의 PK를 가리키는 컬럼

데이터가 중복되지 않게 분산 저장하는 방식

작성자가 작성자 테이블로 분산됐으니까 작성자 테이블을 가리키는 Foreign Key가 필요하다. 작성자의 id를 가리키는 컬럼이 필요하다.

데이터를 분산 저장하게 되면 반드시 등장하는 게
부모 테이블, 자식 테이블

참조 당하는 테이블이 부모 테이블
참조 하는 테이블이 자식 테이블

SQL 끝나면
JDBC API를 사용해서 SQL을 던지는 방법
프로그램 안에서 SQL을 던지는 방법 (JDBC API)
파일에 저장하는 대신 데이터베이스에 저장

0개의 댓글