| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 서비스레이어
- @Valid
- 비즈니스레이어
- SpringBoot
- c:if
- @ResponseBody
- @RequestParam
- produces
- @RequestMapping
- AOP
- MVC
- .xml
- 스프링
- frontController
- Model
- jointpoint
- 바인딩변수
- spring
- springmvc
- application.properties
- @
- Java
- 어노테이션
- 생성자주입
- after-throwing
- PointCut
- 의존주입
- springjdbc
- 유효성검사
- gradle
- Today
- Total
메모장
DB ,DBMS 본문
DB(데이터,정보,자료)를 다루는 시스템을 DBMS라고 한다.
우리의 목적 : ★ 중복 데이터가 없는 DB를 만드는 것 ★
이로서 얻게 되는 효과 -> 서버 비용이 절감
-> 영업 이익 증가
MySQL 을 실습 해보자 !

1. CREATE DATABASE HONG(데이터 베이스명);
2. 생성 후 내가 그 HONG 이라는 데이터 베이스를 사용하겠다 ! -> USE HONG;
3. 데이터가 잘 생성되었는지 한번 확인 해보자 ! -> SHOW DATABASES; 로 확인하면
HONG 데이터 베이스가 잘 생성된 것을 볼 수 있다.
DB에서 활용하는 언어 SQL(쿼리문) -> 인터프리터 언어(채팅형 언어)
한줄씩 코딩하고 실행할수있음 ! 가독성을 위해 대문자로 작성해야 한다 !
자바와 조금 다르다 주석을 달려면 ' -- ' 을 앞에 붙인다 .
; 세미콜론으로 마침표를 찍는것은 똑같다.
MySQL 을 실습해보자 !

-> Query OK : 문법은 맞았다 라는 뜻
-> 0 rows : 적용된 데이터는 없다 .
-> 1 row : 적용된 데이터가 1개 있다. <지금 여기선 HONG 이라는 데이터베이스가 만들어졌다.
적용된게 하나 있다 . >
테이블을 만들었다 가정해보자 !
학생 테이블 : 정보가 저장되어있는 집합
-------> PK(고유키)로 각 행을 식별
PK(학번) 이름 점수 동아리 가로 파트
1001 홍길동 80 농구부 >> 데이터는 행(튜플,레코드,row) 단위로 저장됨
1002 임꺽정 75 미술부
.
. 세로 파트
>> 열(column,속성,필드,attribute) : 멤버변수,인스턴스 변수 (VO)
이번에는 테이블을 만들어 보자 !

- NUM 이라는 컬럼명. 타입은 INT이고 PRIMARY KEY 야 자동 증가 시켜줘!
- INT 부분이 자료형들이다. 자바의 String 같은 부분이 VARCHAR 이고 뒤에 공간( ) 을 지정 해줘야 한다.
- 뒤에 부분을 제약조건이라고 한다.
- 반드시 있어야 하는 부분은 pk이다 ! PRIMARY KEY
- not null은 값이 없으면 받지 않겠다
- default 은 0으로 설정 하겠다 . 기본설정을
INSERT INTO STUDENT (NAME, SCORE, POS, LV) VALUES (속성값1,속성값2,...)
값을 추가 할것이다 테이블에 이름 점수 포지션 레벨 그에 해당하는 속성값
SELECT * FROM STUDENT;
전체를 출력해줘 학생 테이블
DELETE FROM STUDENT WHERE NUM=12;
삭제 해줘 학생테이블을 어디를? NUM =12인 조건이 있는곳을
SELECT * FROM STUDENT WHERE POS='탑' AND SCORE<50;
전체*에서 학생테이블 포지션이 탑 ' 이고 ' 점수가 50점 밑인사람
UPDATE 테이블명 SET 열=값,열=값,... WHERE 열=조건;
다시 바꿔줘 테이블 바꾸기 위한 값 조건이 있는 자리를
WHERE 조건절 이라고도 한다 ! 특정한 조건을 가진 애들 보여줘 !
~면서 는 AND
ASC - 오름차순
DESC - 내림차순
LIKE 구문에 %아%가 들어가는 것 검색
DROP - 테이블을 지울때 EX) DROP TABLE HONG;
TRUNCATE 테이블명; ------> 테이블 안의 데이터를 비워준다. 지워준다.
Q1. 학생 테이블에서 이름, 포지션 열만 검색
SELECT NAME,POS FROM STUDENT;
Q2. 학생 테이블에서 번호가 6이하이면서, 점수가 20점초과이면서, 포지션이 정글,바텀,서포터인 목록을 출력
SELECT * FROM STUDENT WHERE NUM<=6 AND SCORE>20 AND POS IN ('정글','바텀','서포터');
전체에서 학생포지션 조건 6이하 이면서 20 초과 이면서 포지션이 ( ) 인
아무무
모르가나
Q3. 학생 테이블에서 포지션 열이 탑인 데이터 중에 점수 열이 50점미만인 데이터를 검색해서 레벨 오름차순으로 정렬하고, 같은 레벨일 경우 번호가 높은 순으로 출력
SELECT * FROM STUDENT WHERE POS='탑' AND SCORE<50 ORDER BY LV ASC, NUM DESC;
전체에서 학생테이블 조건 포지션이 '탑' 이고 점수가 50 미만 레벨은 오름차순, 번호는 내림차순
이렐리아
그웬
티모
말파이트
Q4. 학생 테이블에서 이름이 아라는 글자를 포함하는 목록을 출력
SELECT * FROM STUDENT WHERE NAME LIKE '%아%';
조건이 이름이 '아' 가 들어감
아리
아무무
오리아나
이렐리아
예제를 통해 연습해보자 !
Q1. 숫자 형식의 열 3개(a,b,c)를 가진 apple 테이블을 생성
Q2. apple 테이블에 a,b,c 열 순서대로 (5,3,7) 데이터와 (1,4,9) 데이터를 삽입

Q3. apple 테이블에서 b의 값이 3인 데이터를 5로 수정
Q4. apple 테이블에서 a의 값이 5인 데이터를 삭제
Q5. apple 테이블을 삭제

Q4에서 A=5인 행을 다 삭제 해준다 . 만약 A=5만 제거 하고 싶다면 UPDATE로 숫자를 바꾸는것이 맞다.
한줄을 다 삭제하는건 DELETE !
WHERE 은 일반적인 조건절
HAVING 은 GROUP BY의 조건절

레벨이 몇개 있는가 카운팅 할때 COUNT

AS 로 별칭을 붙여줄수 있음

SUM(LV) 이 포지션에 있는 레벨들의 총합

정렬하지 않으면 등록된 순으로 나온다.
ORDER BY 컬럼명 [ 오름차순 | 내림차순 ];
SELECT ***** 다 하고 마지막에 붙는애(ORDER BY)
mysql> SELECT POS FROM STUDENT GROUP BY POS HAVING SUM(LV)>=10
포지션 학생테이블에서 포지션별로 묶어줘 근데 레벨의 합이 10이상인
ORDER BY SUM(LV) DESC;
레벨의 합으로 내림차순 할거야

자바의 상속의 개념처럼 DB 에서도 두개 의 테이블이 연관 된다.
[학생 테이블] >> 자식 테이블 (FK가 있다 . 외래키 )
학생명 동아리(FK,외래키,외부키 - 반드시 관계를갖게되는 테이블의 PK여야만함!!!)
학생1 13
학생2 14
학생3 12
학생4 13
학생5 14
[동아리 테이블] >> 부모 테이블
PK 동아리명
11 회화부
12 농구부
13 미술부
14 미술작품감상부
※ 데이터 자체는 몇개없어도,
테이블은 많이 존재할수있다!
-> 잘게 나눠서 관리하는것이
데이터중복을 더 잘 예방할수있어서 용이하다!
CREATE TABLE A( >> 자식테이블
NUM INT PRIMARY KEY,
NAME VARCHAR(15) NOT NULL,
DEPT INT NOT NULL,
FOREIGN KEY (DEPT) REFERENCES B(NUM) ON DELETE CASCADE
); 자식 FK 부모 PK
[ON DELETE CASCADE]
: 농구부 제거시 그에 해당하는 이름도 함께 제거됨
mysql> CREATE TABLE B( >> 부모 테이블
NUM INT PRIMARY KEY,
NAME VARCHAR(20) NOT NULL
);
Query OK, 0 rows affected (0.01 sec)
MySQL 에서는 만약 어떤 테이블의 row 의 정보가 다른 테이블과 foreign key 로 묶여있을 때 DELETE 명령어를 사용해 row 를 삭제하려고 하면, ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails 와 같은 에러 메시지를 보여주며 DELELTE 처리를 거부한다.
에러 메시지를 살펴보면 parent row 라는 표현을 확인할 수 있다. foreign key 로 묶일 때 부모와 자식의 관계가 성립하기 때문이다. primary key 값을 foreign key 로 전달하는 쪽이 '부모', foreign key 를 받아오는 쪽이 '자식' 이라고 할 수 있습니다.
부모 쪽의 row 를 먼저 지울 수는 없지만 자식 쪽의 row 를 지우는 것은 가능합니다. 연결된 자식 데이터를 전부 지우고 나면 부모 쪽의 데이터를 지우는 것이 가능합니다.
< ON DELETE CASCADE >
CASCADE 는 부모 테이블의 row 에 DELETE 또는 UPDATE 명령어를 적용할 때, 자동적으로 자식 테이블의 매치되는 row 에도 똑같이 DELETE 또는 UPDATE 를 반영하는 것을 의미합니다. ON DELETE CASCADE 옵션을 적용하면 부모 테이블에서 row 를 삭제할 경우 연결된 자식 테이블의 row 가 함께 삭제됩니다. 연결된 데이터를 한 번에 지울 수 있어 데이터의 관리가 편리해지고 일관성을 유지할 수 있습니다.
'DB > 개념정리' 카테고리의 다른 글
| JDBC - 임시 멤버 변수 구현 (0) | 2024.04.10 |
|---|---|
| JDBC PrepareStatement (0) | 2024.04.10 |
| MySQL 날짜 , 날짜함수 (0) | 2024.04.10 |
| JDBC - MVC패턴으로 만들기(웹크롤링) (0) | 2024.04.10 |
| JDBC (0) | 2024.04.10 |