Web (웹), Server (서버)

[MySQL] 테이블에 데이터 생성 · 읽기 · 수정 · 삭제 / 데이터 CRUD - INSERT · SELECT · UPDATE · DELETE / PRIMARY KEY, AUTO_INCREMENT 초기화

Oscar:) 2023. 3. 28. 18:31

 

지난 포스팅에서 데이터베이스를 생성해보고,

테이블을 관리하는 방법까지 알아보았다.

 

이제 테이블에 데이터를 직접 CRUD 해보며 DB를 본격적으로 사용해 보겠다.

 


 

CRUD란?

 

대부분의 컴퓨터 소프트웨어가 가지는 데이터 처리 기능인

생성 · 읽기 · 수정 · 삭제를 묶어서 일컫는 말이다.

(CREATE / READ / UPDATE / DELETE)

 

기능적인 의미로는 CRUD와 동일하다고 볼 수 있지만,

SQL 구문에서는 다음과 같이 사용한다.

(INSERT / SELECT / UPDATE / DELETE)

 


 

데이터 추가에 앞서,

지난 포스팅까지 사용했던 테이블의 구조를 확인하고 시작하자.

 

 

지난 포스팅과 일부 달라진 점이 있다면,

'age' 컬럼 자료형을 수정했고 NULL을 허용했으며 Default 값을 추가해줬다.

 


 

INSERT - 데이터 추가

 

문법)
INSERT INTO '테이블 이름'('컬럼 이름') VALUES('추가할 데이터');

예시)
INSERT INTO user(id, name, age) VALUES('oscar123', 'Oscar', '28');

 

파라미터에 작성한 각각의 컬럼과 값이

인덱스 값을 기준으로 알맞게 입력된다.

 

 

결과)

 

데이터가 잘 입력된 것을 확인했다.

 

'SELECT * FROM' 구문은 전체 데이터를 확인하는 역할이다.

자세한 내용은 아래 '데이터 읽기' 파트에서 알아보자.

 


 

이번에는 id, name 컬럼에만 데이터를 추가해 보겠다.

('age' 컬럼은 NULL이 허용되었고, Default 값이 설정되어 있다)

 

 

결과)

 

'age' 컬럼에는 데이터를 추가하지 않았지만,

NULL 이 아닌 Default 값으로 대체된 것을 확인할 수 있다.

 

* Default 값을 설정하지 않았다면 NULL 로 입력되며,

NOT NULL까지 설정되어 있다면 에러가 출력될 것이다.

 


 

SELECT - 데이터 읽기 (확인하기)

 

● 테이블 전체 데이터 확인하기

 

위에서 사용했던 테이블의 전체 데이터를 확인하는 구문이다.

문법)
SELECT * FROM '테이블 이름';

예시)
SELECT * FROM user;

(*) 문자를 '전체 범위' 라는 의미로 이해하면 된다.

 

결과 화면은 위의 '데이터 추가' 파트에서 다시 확인하기 바란다.

 


 

● 특정 컬럼의 데이터 확인하기

 

문법)
SELECT '컬럼 이름' FROM '테이블 이름';

예시)
SELECT name FROM user;

 

결과)

 

'name' 컬럼의 정보만을 확인할 수 있다.

 


 

● 특정 컬럼의 데이터 상세 확인하기

 

WHERE 절을 사용하여 상세한 데이터만을 뽑아올 수 있다.

문법)
SELECT '컬럼 이름' FROM '테이블 이름' WHERE '조건식';

예시)
SELECT id FROM user WHERE num=2;

 

결과)

 

'num' 컬럼의 값이 2인 'id' 컬럼의 데이터를 확인할 수 있다.

 


 

● PRIMARY KEY와 연산자를 활용하기

 

크기 비교가 가능한 컬럼이 있다면, (<, >, <=, >=)

등의 연산자를 활용하여 원하는 데이터만을 확인할 수 있다.

예시)
SELECT * FROM user WHERE num > 2;

 

결과)

 

앞서 게시했던 '테이블 생성과 제약조건' 포스팅 글에서,

'PRIMARY KEY', 'AUTO_INCREMENT' 제약 조건을 'num' 컬럼에 설정했었다.

 

따라서 'num' 컬럼이 '회원 번호' 와 같은 느낌으로 사용될 수 있으며,

위 처럼 'num' 컬럼을 기준으로 필요한 만큼의 데이터만을 얻어올 수 있다.

 


 

● 오름 / 내림차순으로 데이터 나열하기

 

- ORDER BY 절을 사용하여 오름차순으로 데이터를 나열할 수 있다.

문법)
SELECT '컬럼 이름' FROM '테이블 이름' ORDER BY '정렬 기준이 될 컬럼 이름';

예시)
SELECT * FROM user ORDER BY age;
==
SELECT * FROM user ORDER BY age ASC;

 

ASC는 작성해도, 작성하지 않아도 상관없다.

(내림차순은 DESC를 사용하기 때문에, 비교 차원에서 작성했다)

 

 

결과)

아래 '데이터 수정' 파트에서 'age' 컬럼의 데이터를 수정했다.

 

기존에는 'num' 컬럼의 값으로 오름차순 정렬되었지만,

'age' 컬럼을 기준으로 오름차순 정렬된 것을 확인할 수 있다.

 


 

- DESC 를 작성하면 내림차순으로 데이터를 나열할 수 있다.

문법)
SELECT '컬럼 이름' FROM '테이블 이름' ORDER BY '정렬 기준이 될 컬럼 이름' DESC;

예시)
SELECT * FROM user ORDER BY num DESC;

 

결과)

 

'num' 컬럼을 기준으로 내림차순 정렬되었다.

 


 

UPDATE - 데이터 수정

 

문법)
UPDATE '테이블 이름' SET '수정할 데이터' WHERE '수정할 컬럼을 찾는 기준'; 

예시)
UPDATE user SET age='33' WHERE name='Naki';

 

결과)

 

'name' = Naki 인 컬럼의 'age' 데이터가

PRIVATTE > 33 으로 수정되었다.

 

같은 방법으로 'age' 데이터가 PRIVATE인 행을 모두 수정해주겠다.

(위의 '오름차순/내림차순' 파트 예제에 사용되었다.)

 


 

DELETE - 데이터 삭제

 

문법)
DELETE FROM '테이블 이름' WHERE '삭제할 컬럼을 찾는 기준';

예시)
DELETE FROM user WHERE name='Bob';

 

결과)

 

'name' 컬럼의 값이 'Bob'에 해당하는 데이터가 삭제되었다.

 

 


 

데이터 삭제 후, AUTO_INCREMENT 초기화

 

데이터 삭제 후, 다시 추가하면 다음과 같은 상황이 발생한다.

 

 

이전에 삭제했던 'num' = 5 자리가 남겨진 채,

'num' = 6 부터 데이터가 쌓이는 모습이다.

 

이를 해결하기 위해서는 AUTO_INCREMENT 조건을 초기화해줘야 한다.

문법)
SET @CNT=0;
UPDATE '테이블 이름' SET 'PRIMARY KEY 컬럼' = @CNT:= @CNT+1;
ALTER TABLE '테이블 이름' AUTO_INCREMENT=1;

예시)
SET @CNT=0;
UPDATE user SET num = @CNT:= @CNT+1;
ALTER TABLE user AUTO_INCREMENT=1;

*CNT : 임의로 필드명을 지정해준다.

 

● SET @CNT=0;
CNT를 0으로 초기화 해준다.
이 구문을 먼저 입력하지 않으면, 아래 UPDATE 구문 입력 시 오류가 발생한다.

● UPDATE user SET num = @CNT:= @CNT+1;
여기까지만 입력해도 'num' 데이터가 비어있는 값이 없게끔 당겨진다.
하지만, 앞으로 추가되는 데이터는 여전히 빈 값이 유지된다.

● ALTER TABLE user AUTO_INCREMENT=1;
앞으로 추가되는 데이터도 다시 1씩 자동 증가 적용되게끔 해준다.

 

결과)

 

Bob의 'num' 가 6 → 5로 당겨진 것을 확인할 수 있다.

 

 


 

MySQL에서 데이터를 CRUD하는 방법을 알아보았다.

 

이제 데이터베이스를 사용하여 데이터를 처리할 수 있게 되었다!