본문 바로가기
[파이썬]/데이터베이스

[MariaDB] CRUD

by sung min_Kim 2023. 11. 21.


현재 글에서는 앞서 작성한 테이블 생성에 이어 CRUD를 수행하려 한다.
테이블 생성에 관하여 참고하실 분들은 아래의 글을 참고하시라.

· 테이블 생성
2023.11.21 - [[파이썬]/데이터베이스] - [파이썬][데이터베이스][MariaDB] 테이블 생성 (+HeidiSQL)

 

[파이썬][데이터베이스][MariaDB] 테이블 생성 (+HeidiSQL)

· MariaDB 설치 2023.11.20 - [[파이썬]/프로그래밍] - [파이썬][프로그래밍] MariaDB 설치 [파이썬][프로그래밍] MariaDB 설치 MariaDB MySQL의 기능을 향상 시 오픈소스 관계형 데이터베이스 · MariaDB를 사용하

sungmin93.tistory.com


CRUD


데이터베이스에 등록된 데이터를 처리하는 작업


· 'CUUD'를 수행하는 이유는 ?


 사용자는 테이블의 행과 열 데이터를 데이터베이스에 등록하여 데이터를 조작하고 관리한다.
 이 과정에서 데이터 생성, 조회, 삭제, 갱신 등의 작업을 수행하여 사용자는 요구사항에 따라 데이터를 효율적으로 관리할 수 있게 된다.

 


· C (Create, 생성)


 이는 사용자가 데이터베이스에 새로운 데이터를 추가하는 작업을 의미한다.
 ex) 새로운 사용자 등록, 새로운 상품 등록
 명령어 : INSERT INTO 테이블명 (컬럼명1, ..., 컬럼명N)
           VALUES (값1, ..., 값N);


 <예제> 상품분류정보에 데이터 생성하기

- 상품분류정보의 10번 행에 상품분류 코드는 P501, 상품분류명은 침구류에 대한 행 데이터를 생성하자. 

· 테이블명 : 상품분류정보(lprod)
· 컬럼명 : 순서(Lprod_id),  상품분류코드(Lprod_gu), 상품분류명(Lprod_nm)

 

 

 



 'INSERT INTO' 명령어를 통해 데이터를 생성할 수 있다. 문자열은 '작은따옴표'로 감싸주고 문장 맨 끝에는 세미콜론 (;)을 사용해야 한다.

INSERT INTO lprod (lprod_id, lprod_gu, lprod_nm) VALUES (10, 'P501', '침구류');


위의 명령어를 실행하면 10번 행의 데이터가 성공적으로 생성된 것을 볼 수 있다.

C_데이터 생성

 


· R (Read, 조회)


 이는 사용자가 데이터베이스에 저장된 데이터를 조회하고 검색하는 작업을 의미한다.
 ex) 사용자의 정보 조회, 특정 상품 검색
 명령어 :  SELECT 조회할 컬럼명1, ..., 컬럼명N
           FROM 테이블명;


  <예제> 상품분류정보 전체 조회하기

· 테이블명 : 상품분류정보(lprod)
· 컬럼명 : 순서(Lprod_id),  상품분류코드(Lprod_gu), 상품분류명(Lprod_nm)

R_데이터 조회_1

 'SELCT ~ FROM' 명령어를 사용하여 전체(*) 데이터를 조회할 수 있다.

SELECT *
FROM lprod;

  

<예제>  상품분류정보 중에 상품분류명이 전자 제품인 상품분류코드 조회하기

· 테이블명 : 상품분류정보(lprod)
· 컬럼명 : 순서(Lprod_id),  상품분류코드(Lprod_gu), 상품분류명(Lprod_nm)

* Where절을 사용하여 상품분류명에 대한 조건을 부여하자.

R_데이터 조회_2

 '상품분류명이 전자 제품인 상품분류코드'라는 특정 조건에 부합하는 데이터를 검색하기 위해서는 Where절을 반드시 사용해여야 한다. Where절은 프로그래밍에서 if문과 비슷한 역할을 수행하는데, 특정 조건을 만족하는 레코드만을 선택하여 조회하는 데 사용된다. if문과는 다르게 데이터를 필터링하는 역할만 수행한다. 

참고로 MariaDB의 컴파일(해석) 순서는 아래와 같이 동작하며, 추후에 자세히 다루도록 하겠다.
1. Select  →  2. From 테이블  →  3. Where 조건  →  4. 조회할 컬럼

 


· U (Update, 수정)


 이는 사용자가 데이터베이스에 저장된 데이터를 수정하는 작업을 의미한다.
 ex) 사용자의 주소 변경, 상품 가격 정보 갱신
 명령어 :  UPDATE 테이블명
             SET 수정할 컬럼명1 = 수정할 값1,
                 수정할 컬럼명2 = 수정할 값2
           WHERE 조건 제시;


  <예제> 상품분류정보 수정하기

- 상품분류 코드가 P201인 상품분류명을 남성 정장으로 수정하기
- 상품분류명이 침구류인 상품분류 코드를 P404로 수정하기


· 테이블명 : 상품분류정보(lprod)
· 컬럼명 : 순서(Lprod_id),  상품분류코드(Lprod_gu), 상품분류명(Lprod_nm)

U_데이터 갱신 전_데이터 확인 작업 수행

 Update는 데이터를 변경하는 작업이기 때문에 자칫 잘못하다간 데이터를 예기치 않게 손상 및 변경시킬 수 있다. 따라서 Update 할 경우에는 항상 검증할 수 있는 Select문을 사용하여 어떠한 데이터를 갱신할 건지 미리 파악하도록 하자.  
 
 'UPDATE ~ SET ~ WHERE' 명령어를 사용하여 해당 데이터를 수정할 수 있다.

SELECT *
FROM lprod;

UPDATE lprod
  SET lprod_nm = '남성 정장'
WHERE lprod_gu = 'P201';

UPDATE lprod
  SET  lprod_gu = 'P404'
WHERE  lprod_nm ='침구류';

U_데이터 수정

 


· D(Delete, 삭제)


 이는 사용자가 데이터베이스에서 더 이상 필요하지 않은 데이터를 제거하는 작업을 의미한다.
 ex) 탈퇴한 사용자의 정보 삭제, 판매 중지된 상품의 정보 제거 등
 명령어 :  DELETE
FROM 테이블명
          WHERE 삭제 조건 제시;

<예제>  상품분류정보의 데이터 삭제하기

- 상품분류명이 문구류에 해당하는 데이터 삭제
- 상품분류코드가 P101에 해당하는 데이터 삭제 

· 테이블명 : 상품분류정보(lprod)

· 컬럼명 : 순서(Lprod_id),  상품분류코드(Lprod_gu), 상품분류명(Lprod_nm)


 'DELETE FROM ~ WHERE' 명령어를 사용하여 첫 번째 예제의 행 데이터를 하였다.

D_데이터 삭제_1

 
 두 번째 예제에 해당하는 데이터를 삭제하려고 하자, 에러가 발생한다.

D_데이터 삭제_2


 무슨 에러인가 하면, 상품분류정보(Lprod) 테이블과 상품정보(Prod) 테이블은 서로 '일대 다'의 연관 관계를 맺고 있다.
 즉, 상품정보 테이블의 상품분류(prod_lgu)는 상품분류정보 테이블의 기본 키에 해당하는 순서(lprod_gu)를 참조하고 있다. 

 아래의 ERD를 보면 상품정보 테이블의 상품분류(prod_lgu)는 상품정보분류 테이블의 기본 키인 순서(lprod_gu)를 참조하고 있는 것을 확인할 수 있다.

ERD

 따라서 '' 쪽의 기본 키에 해당하는 데이터를 삭제하려고 하면, 그 값을 참조하고 있는 ''쪽 테이블의 외래 키가 참조하고 있는 데이터가 사라져서 오류가 발생하게 된다. 이를 참조 무결성 오류라고 한다.
 따라서 기본키에 해당하는 데이터를 삭제하려면 먼저 그 기본 키를 참조하고 있는 외래 키의 데이터를 먼저 삭제하고 난 이후에 기본 키의 데이터를 삭제해야 한다.


D_데이터 삭제_3

 그러기 위해 우선 기본 키의 데이터를 참조하고 있는 외래 키의 데이터를 조회하자. 우리는 'P101' 데이터를 삭제할 것이기 때문에 'P101' 데이터를 참조하고 있는 상품정보 테이블의 외래 키 'prod_lgu' 데이터를 먼저 삭제한다.
 

D_데이터 삭제_4

 기본 키의 데이터를 참조하고 있던 외래 키의 데이터가 삭제되었다. 이로써 기본 키의 데이터를 삭제할 수 있는 상태가 된다.


D_데이터 삭제_5

 최종적으로 기본 키의 데이터를 참조하고 있는 외래 키의 데이터를 먼저 삭제한 이후에, 기본 키의 데이터를 삭제하였더니 오류가 발생하지 않는 것을 확인할 수 있다.

 



이처럼 사용자는 특정 조건에 의한 데이터의 조작과 처리를 통해 데이터를 효율적으로 관리한다.

데이터를 생성(Create)할 때에는 누락된 정보가 없는지, 타입은 올바른지 등을 확인해야 하며, 데이터를 조회(Read)할 때에는 필요한 데이터만 조회하여 민감한 데이터는 되도록 보호해야 한다.

데이터를 수정(Update) 할 때는 항상 Select문을 사용하여 검증 단계를 거치고, 예상대로 작업이 되지 않을 것을 대비해 데이터를 백업하는 것이 좋다.

데이터를 삭제(Delete)할 때는 주의해야 한다.
한 번 삭제된 데이터는 복구하기 어렵기 때문에, 삭제 전에 반드시 불필요한 데이터인지 확인해야 한다.
또한 데이터 삭제 시 다른 데이터와의 관계를 고려하여 해당 데이터를 삭제해야 한다.
다른 테이블에서 참조하고 있는 데이터를 삭제하면 참조 무결성 오류가 발생할 수 있기 때문이다.

데이터 조회에 대한 활용 빈도가 높으므로 다음 글에서는 데이터 조회 시 활용할 수 있는 함수 및 서브 쿼리와 컴파일 절차 등을 알아보도록 하겠다.