Programming/데이터베이스

[MySQL] 데이터 조작문 DML

Bam_t 2022. 1. 20. 19:55
728x90

지난 포스트에서는 데이터베이스와, 테이블을 만드는 데이터 정의문에 대해 알아보았었습니다. 이번 포스트에서는 데이터의 검색, 삽입, 수정, 삭제 등의 조작을 하는 데이터 조작문에 대해 다뤄보겠습니다.

테이블에 대한 실습은 데이터 정의문에서 만들었던 테이블을 가지고 계속해서 실습진행하겠습니다.


1.INSERT INTO

INSERT INTO문은 테이블에 레코드(행, row)를 삽입하는 명령입니다. INSERT INTO문은 두가지 방식으로 작성할 수 있습니다. 주의할 점은 컬럼명과 값 타입 등이 일치해야 오류 없이 레코드가 삽입됩니다.

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

레코드가 제대로 삽입되었는지는 SELECT명령으로 확인합니다. SELECT문에 대해서는 잠시 후에 더 자세히 다루겠습니다.

 

 

 

2. UPDATE

UPDATE명령은 레코드의 내용을 수정하는 명령입니다.

SET으로 어떤 컬럼의 값을 수정할 지 지정합니다. WHERE 구문과 함께 사용한다면 WHER E구문으로 지정된 컬럼의 값을 가진 레코드만 값이 수정됩니다.

UPDATE 테이블명
SET 컬럼명 = 값, ...
WHERE 컬럼명 = 값;

아래 테이블에서 password 레코드를 변경해보겠습니다.


SET 구문만 사용하니 테이블의 모든 레코드의 password가 0000로 변경되었습니다. 그러면 이제 WHERE 구문을 이용해서 특정 값을 가진 레코드의 password를 변경해보겠습니다.

이렇게 WHERE 구문을 통해 특정 값을 가진 레코드의 특정 내용만을 수정할 수 있습니다.

WHERE 구문 이후에 ORDER BY라는 구문을 통해 순서를 지정할 수 있습니다. 컬럼명 뒤에 DESC가 붙으면 내림차순, ASC가 붙으면 오름차순(기본값)으로 정렬하고 LIMIT 구문을 더하면 오름차순으로 몇번째 까지 수정 등을 지정할 수 있습니다. ORDER BY는 이후로도 사용되는 구문입니다.

ORDER BY 컬럼명 DESC;
ORDER BY 컬럼명 ASC;


//내림차순으로 3개까지 지정
ORDER BY 컬럼명 DESC
LIMIT 3;

 

 

 

3. DELETE FROM

DELETE는 테이블의 레코드를 삭제하는 명령입니다. WHERE 등의 구문을 통해 조건에 맞는 레코드를 삭제하게 됩니다. WHERE 구문없이 DELETE FROM만 사용하면 테이블 내부의 모든 레코드들을 삭제합니다.

DELETE FROM 테이블명 WHERE 컬럼명 = 값;

 

 

4. SELECT

SELECT는 레코드들을 검색하는 명령입니다. WHERE이나 다양한 연산자들을 통해서 조건에 맞는 레코드들을 확인할 수 있습니다.

컬럼명 대신 (*)를 사용하면 테이블 내의 모든 컬럼을 보여줍니다. 또, WHERE 조건을 넣으면 조건에 맞는 레코드들만, 안넣으면 모든 레코드들을 보여주게 됩니다.

SELECT 컬럼명 FROM 테이블명 WHERE 조건;

 

첫 번째 사용법은 테이블 내의 모든 컬럼, 모든 레코드들을 보여주는 방식입니다. 

SELECT * FROM 테이블명;

테이블 no가 제각각인 것은 AUTO_INCREMENT 옵션때문에 그렇습니다.


두 번째 사용법은 테이블의 특정 컬럼과 모든 레코드들을 보여주는 방식입니다.


세 번째 사용법은 모든 컬럼과 특정 조건에 부합하는 레코드들을 보여주는 방식입니다.


네 번째 사용법은 DISTINCT 구문을 더해 중복된 값이 한 번만 나타나도록 하는 방식입니다. password에 1234라는 값이 두 번 존재하는데, 이것을 한 번만 나타나게 할 수 있습니다. 역시 이에 대해 위에서 배운 ORDER BY 구문을 사용할 수 있습니다.

ORDER BY만을 이용해서 특정 컬럼에 대해 오름차순, 내림차순으로 가져오는 것도 가능합니다.


추가로 SELECT명령에서 테이블이나 컬럼에 별칭(Alias)를 붙이고 SELECT문에서 사용할 수 있기도 합니다.

//컬럼에 별칭 부여
SELECT 컬럼명 AS 별칭 FROM 테이블명;

//테이블에 별칭 부여
SELECT 컬럼명 FROM 테이블명 AS 별칭;

 

 

 

5. REPLACE

REPLACE는 특정 데이터를 더욱 간단하게 바꾸게 해주는 문법입니다. 이전에 배운 방식으로 값을 변경하려면 UPDATE를 하거나 INSERT로 새로 삽입해야합니다. 하지만 REPLACE를 이용한다면 명령에서 자체적으로 DELETE를 하고 INSERT를 해주는 식으로 동작하게 됩니다. 물론 사용하기 편하다는 점이 있지만, DELETE 동작 이후 INSERT를 한다는 동작 때문에 테이블이 커지면 리소스를 덜 차지하게 됩니다.

WHERE 구문과 함께 사용하면 조건에 따라 REPLACE를 하고, WHERE 구문이 없다면 동일한 값을 가진 모든 레코드들이 변경됩니다.

REPLACE(컬럼명, 값, 변경할_값);

 

 

 

6. TRUNCATE

TRUNCATE는 테이블의 레코드들을 전부 삭제하는 명령입니다.

TRUNCATE 테이블명;

이미 삭제 명령에 DELETE가 있는데 과연 무슨차이를 보일까요.

TRUNCATE는 데이블 자체를 DROP해서 완전히 삭제한 후 동일한 컬럼을 가진 빈 테이블을 만들어냅니다. 그래서 전체 삭제의 경우 DELETE 명령보다 빠르게 작성되고 AUTO_INCREMENT와 같은 옵션도 삭제된 후 다시만들어 진다는 특징을 가진 명령입니다.

따라서 테이블의 레코드를 전체 삭제하길 원하는 경우 DELETE 명령보다는 TRUNCATE 명령을 이용하는 것이 더 좋은 방법이라고 할 수 있습니다.


이번 포스트는 여기서 끊고 다음 포스트에서 DML의 중요한 요소인 JOIN에 대해서 이어서 다뤄보겠습니다.

728x90