메모장

DB ,DBMS 본문

DB/개념정리

DB ,DBMS

Itchild 2024. 4. 10. 22:12
728x90
반응형

 

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 가 함께 삭제됩니다. 연결된 데이터를 한 번에 지울 수 있어 데이터의 관리가 편리해지고 일관성을 유지할 수 있습니다.

 

728x90
반응형

'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