Language/SQL

데이터 처리 - CRUD

simDev1234 2022. 8. 16. 00:57

|  CRUD

- 소프트웨어가 가지는 기본적인 데이터 처리 기능

- CRUD는 MariaDB/MySQL, ORACLE 모두 동일한 문법을 사용하는 것으로 확인됐다. (아래 코드 비교)

구분 의미 SQL REST API WHERE 필수
CREATE 삽입 INSERT PUT/POST X
READ 조회 SELECT GET X
UPDATE 갱신 UPDATE PUT/PATCH O
DELETE 삭제 DELETE DELETE O
-- CRUD
-- INSERT
INSERT INTO bootcamp_member2
(name, email, mobile_no, password, marketing_yn, register_date)
VALUES
('테스트3', 'test3@gmail.com', '01022223212', '2222', true, now());

-- SELECT : WHERE 선택 (대다수 WHERE 사용)
SELECT *
FROM bootcamp_member2
WHERE marketing_yn = true
  AND name = '테스트3';

-- UPDATE : WHERE 필수
UPDATE bootcamp_member2
SET marketing_yn = false
WHERE name = '김길동';

-- DELETE : WHERE 필수
DELETE FROM bootcamp_member2
WHERE email = 'kim123@gmail.com';

 

1.  데이터 삽입(INSERT)

🐱 단순 데이터 추가

- 아래와 같이 단순 데이터를 추가할 경우, 데이터가 없을 때(NULL) 문제가 발생할 수 있다.
- 회원가입을 예로 들었을 때, 어떤 MEMBER의 ID는 유일해야한다. --> 데이터 입력에 대한 제약이 필요
- 여기서 제약 조건이 필요해진다.
  * 제약조건(Constraint) : 특정 데이터에 대해 거는 제약

📡 MariaDB

INSERT INTO 테이블명
(칼럼명, 칼럼명, 칼럼명....)
VALUES
(값, 값, 값...);

-- 예시
INSERT INTO bootcamp_member
(name, email, mobile_no, password, marketing_yn, register_date)
VALUES
('홍길동', 'simDev1234@gmail.com', '01011111111', '1234', true, now());
더보기

📡 Oracle

INSERT INTO MEMBER(ID, PWD) VALUES('NEW LEC','111');
INSERT INTO MEMBER(ID, PWD) VALUES('DRAGON','111');

🌈 인코딩 문제 해결

- 테이블에 Insert를 하려고 보니 아래와 같은 오류가 나타났었다.

Incorrect string value: '\xED\x99\x8D\xEA\xB8\xB8...' for column ~~~~~~~~

- 내용을 쭉 읽어보니까 위 'name' 칼럼의 한글이 깨져서여서(인코딩 문제) 정확한 원인과 해결 방법을 찾았는데

  - 원인 : DB의 디폴트 인코딩 방식 (default_character_set_name)이 utf8이 아니여서였다.

select schema_name, default_character_set_name from information_schema.schemata;
+--------------------+----------------------------+
| schema_name        | default_character_set_name |
+--------------------+----------------------------+
| information_schema | utf8mb3                    |
| mysql              | latin1                     |
| performance_schema | utf8mb3                    |
| sys                | utf8mb3                    |
| testdb1            | latin1                     |
+--------------------+----------------------------+

  - 해결 : 아래와 같이 db의 인코딩 방식과, 테이블의 인코딩 방식을 변경하면 된다.

  * 한 번 셋팅된 테이블 인코딩 방식은 db 인코딩 방식을 변경해도 유지되므로 꼭 table도 변경해야한다.

alter database 디비명 default character set utf8;
alter table 테이블명 convert to character set utf8;

 

🐱 제약조건을 통한 INSERT

- 아래에서는 제약조건으로 pk를 예시로 들었다.
- 제약조건에 대한 자세한 내용으로는 [더보기]를 참고하면 자세한 내용이 들어있다.

📡 MariaDB

alter table bootcamp_member2 add constraint primary key pk_bootcamp_member2(email);

 

2.  데이터 조회(SELECT)

(1) 선택적 조회 : WHERE절을 쓰자
- 일반적으로 회사에서 데이터를 조회할 때는, 전체 조회를 하지 않는다.
  데이터 양이 방대하기 때문에 컴퓨터나 너무 느려질 수 있기 때문
- 따라서, WHERE절이 필수는 아니라도 함께 써주는 것이 좋다.

(2) and 나 or를 통해 추가적인 조건사항을 걸 수 있다.

- 아래의 코드처럼, where절을 통한 조건을 걸 때 and나 or를 통해 추가 조건을 걸 수 있다.

📡 MariaDB

-- 전체 조회
select *
from 테이블명
;

-- 선택 조회
select 
  name, email
from 테이블명
;

-- where절 조건
select *
from 테이블명
where 조건
   or 조건
;
더보기

📡 Oracle

-- 전체 조회
select * 
from 테이블명
;

-- 선택 조회
select 
   name, kor, eng, mat, prev
from 테이블명
;

 

3.  데이터 갱신(UPDATE)

(1) WHERE절을 필수로 사용해야 한다.
- 그렇지 않은 경우 전체 데이터가 모두 갱신된다.

(2) 여러개의 칼럼을 동시에 갱신할 수 있다.

📡 MariaDB

update 테이블명
set
    변경할 칼럼의 데이터
where 조건
;
더보기

📡 Oracle

update 테이블명
set 
   변경할 칼럼의 데이터
where 조건

 

4.  데이터 삭제(DELETE)

(1) WHERE절을 필수로 사용해야 한다.
- 그렇지 않은 경우 전체 데이터가 모두 삭제된다.

(2) 데이터를 삭제할 때는 주의를 요한다.

📡 MariaDB

delete from 테이블명
where 조건;
더보기

📡 Oracle

delete from scores 
where name = '바길동';

delete from scores 
where 1 = 1; -- 전체 데이터 삭제

 

 

[ 출처 및 참고 ]

- 부트캠프 수업 내용을 들은 후 정리한 내용입니다.

- 과거에 정리했던 내용과 함께 정리

https://why-dev.tistory.com/73?category=958782