도라에몽 개발자

데이터 변경을 위한 SQL 문 - 입력, 수정, 삭제 기능 본문

DATABASE/MySQL

데이터 변경을 위한 SQL 문 - 입력, 수정, 삭제 기능

Doraemon_lulu 2023. 12. 20. 01:40

데이터베이스(database; DB) 및 테이블(table)을 만든 후에는 데이터를 변경하는 입력 / 수정 / 삭제 기능이 필요함.

INSERT - 데이터 입력

  • 정의
    - 테이블(table)에 행 데이터를 입력하는 기본적인 SQL 문
    - 테이블(table)에 데이터를 삽입하는 명령

  • 형식
    INSERT INTO 테이블_이름 [(열1, 열2, 열3, ...)] VALUES (값1, 값2, 값3, ...)

  • 주의사항
    - 테이블_이름 다음에 나오는 열[(...)]생략 가능함.
     → 열 이름 생략 시, VALUES 다음에 나오는 값들의 순서 및 개수를 테이블을 정의할 때의 열 순서 및 개수와 동일해야 함.
USE market_db;
CREATE TABLE gsfresh (fruit_id INT, fruit_name CHAR(5), amount INT);
-- 위에서 생성한 테이블의 열의 개수는 3개임에 따라, INSERT 문 또한 맞춰서 3개로 작성해야 함.
INSERT INTO gsfresh VALUES (1, 'melon', 5);

 

AUTO_INCREMENT (자동 증가)

  • 정의
    - 열을 정의할 때 1부터 증가하는 값을 입력해줌.

  • 특징
    - AUTO_INCREMENT 로 지정하는 열은 꼭 PRIMARY KEY 로 지정해야 함.
    - 데이터 입력(INSERT INTO...) 에는 NULL 로 지정하면 됨.
CREATE TABLE toystory (
	toy_id INT AUTO_INCREMENT PRIMARY KEY, -- toy_id 열을 자동 증가로 설정
    toy_name CHAR(4),
    age INT
);

INSERT INTO toystory VALUES (NULL, '우디', 25); -- 자동 증가 부분은 NULL로 입력
INSERT INTO toystory VALUES (NULL, '버즈', 30);
INSERT INTO toystory VALUES (NULL, '제시', 24);

SELECT * FROM toystory; -- toystory 테이블의 모든 데이터 출력

 

  • LAST_INSERT_열_이름()
    - 자동 증가로 현재 어느 숫자까지 증가되었는지 확인하는 기능
SELECT LAST_INSERT_ID(); -- ID 열이 현재 어느 숫자까지 증가되었는지 확인

 

  • ALTER TABLE 테이블_이름AUTO_INCREMENT = 숫자 값(=baseline 값)
    - 테이블을 변경하고자 할 때 사용하는 기능
     → 테이블의 열 이름 변경, 새로운 열 정의, 열 삭제 등의 작업을 함.
    - 자동 증가 기능 사용 시, baseline 값을 설정할 수 있음. 
ALTER TABLE toystory AUTO_INCREMENT = 100; -- 테이블 자동 증가 시작값 설정
INSERT INTO toystory VALUES (NULL, '에디', 19);
SELECT * FROM toystory;

 

  • 시스템 변수 @@auto_increment_increment
    - 시스템 변수란, MySQL에서 자체적으로 가지고 있는 설정값이 저장된 변수를 의미. (cf. 앞에 @@가 붙는 것이 특징임.)
    - 자동 증가값 지정할 수 있음.
    - 형식: SET @@auto_increment_increment = 증가값;
-- 시스템 변수: @@auto_increment_increment 활용 예시
SET @@auto_increment_increment = 2; -- 증가값을 2로 지정하여, 2씩 자동 증가되도록 설정함.

 

INSERT INTO ... SELECT

  • 정의
    - 다른 테이블의 데이터를 가져와서 한 번에 입력할 수 있는 기능을 의미함.

  • 형식
    INSERT INTO 테이블_이름 (열_이름1, 열_이름2, ...)
         SELECT 문 ;

  • 주의사항
    - SELECT 문의 열 개수와 INSERT 할 테이블의 열 개수가 동일해야 함. 
     → SELECT COUNT(*) FROM 데이터베이스_이름 . 테이블_이름 ; 활용하여 미리 가져오고자 하는 다른 데이터베이스의 테이블 총 개수를 조회 및 확인할 것 

UPDATE - 데이터 수정

  • 정의
    - 기존에 입력되어 있는 값을 수정하는 명령 (*행 데이터를 수정)

  • 형식
    UPDATE 테이블_이름 SET 열1 = 값1, 열2 = 값2, ... WHERE 조건 ;
USE 데이터베이스_이름;
UPDATE 테이블_이름
    SET 열_이름 = '변경 후 데이터 값'
    WHERE 열_이름 = '변경 전 데이터 값';
SELECT * FROM 테이블_이름 WHERE 열_이름 = '변경 후 데이터 값';

▶ 결과적으로, 테이블의 특정 열의 데이터가 모두 변경하고자 하는 값으로 변경되어 출력됨. 

  • 특징
    - 쉼표(,)를 통해 여러 개의 열을 동시에 변경할 수 있음.
    - WHERE 문을 사용하지 않는다면, 특정 열을 지정하지 않음에 따라 테이블의 모든 행의 값이 변경되므로 주의해야 함.

DELETE - 데이터 삭제

  • 정의
    - 테이블의 행 데이터 삭제 (* 행 단위로 삭제)

  • 형식
    DELETE FROM 테이블_이름 WHERE 조건
-- LIKE ... % 통하여 특정 문자로 시작되는 데이터를 삭제함.
DELETE FROM 테이블_이름 WHERE 열_이름 LIKE '문자열 또는 문자%';

-- DELETE 문 활용 예시
DELETE FROM city_popul WHERE city_name LIKE 'New%'; -- New로 시작하는 도시명 삭제

 

  • 특징
    WHERE 문을 사용하지 않는다면, 특정 열을 지정하지 않음에 따라 테이블의 모든 행의 값이 변경되므로 주의해야 함. 

  • 대용량 테이블의 삭제
    - DELETE 문: 대용량 테이블 삭제 시 오래 걸림. (* 데이터만 삭제하기 때문에 빈 테이블 남음.)
    - DROP 문: 테이블 자체를 삭제하기 때문에 매우 빠르게 삭제됨. (* 테이블 자체를 삭제하기 때문에, 빈 테이블 남지 않음.)
    - TRUNCATE 문: DELETE 문과 동일한 효과를 내면서도 삭제 속도가 훨씬 빠름. (* 데이터만 삭제하기 때문에 빈 테이블 남음.)

     cf. DELETE 문 vs TRUNCATE 문 
    TRUNCATE 문은 WHERE 문을 사용할 수 없음에 따라 조건 없이 전체 행을 삭제할 때만 사용 가능함.