멈추지 않는 기록

[혼자공부하는SQL] 8강 본문

웹 개발/MySQL

[혼자공부하는SQL] 8강

pangil_kim 2025. 2. 13. 04:04
728x90

03-3. 데이터 변경을 위한 SQL문

0. 시작하기 전에

  • 데이터베이스와 테이블을 만든 후에는 데이터를 변경하는, 즉 입력/수정/삭제하는 기능이 필요하다.
    • 입력 : INSERT
    • 수정 : UPDATE
    • 삭제 : DELETE

1. 데이터 입력 : INSERT

1) INSERT 문의 기본 문법

INSERT INTO 테이블 [(열1, 열2, ...] VALUES (값1, 값2, ...)
  • 테이블 이름 다음에 나오는 열은 생략이 가능하다.
  • 열 이름을 생략할 경우에 VALUES 다음에 나오는 값들의 순서 및 개수는 테이블을 정의할 때의 열 순서 및 개수와 동일해야 한다.
USE market_db;
CREATE TABLE hongong1 (toy_id INT, toy_name CHAR(4), age INT);

-- 일반적인 입력 (열을 생략)
INSERT INTO hongong1 VALUES (1, '우디', 25);

-- 나이를 제외한 값만 입력
INSERT INTO hongong1 (toy_id, toy_name) VALUES (2, '버즈');

-- 열 순서를 다르게 입력 (열 순서와 값 순서가 같아야 한다)
INSERT INTO hongong1(toy_name, age, toy_id) VALUES ('제시', 20, 3);

2) AUTO_INCREMENT

-- AUTO_INCREMENT를 기본키로 지정한 예시
CREATE TABLE hongong2(
    toy_id INT AUTO_INCREMENT PRIMARY KEY,
    toy_name CHAR(4),
    age INT
)

-- 세 개의 행 입력
INSERT INTO hongong2 VALUES (NULL, '보핍', 25);
INSERT INTO hongong2 VALUES (NULL, '슬링키', 22);
INSERT INTO hongong2 VALUES (NULL, '렉스', 21);
  • 번호가 크게 의미 있는 것은 아니고, 자동 생성만 된다고 하면 AUTO_INCREMENT를 사용한다.
  • Ex. 물품 구매할 때 생기는 주문 번호

3) LAST_INSERT_ID();

  • 어디까지 입력이 되었는지 (즉, 생성된 AUTO_INCREMENT의 마지막 번호를 확인한다.)
  • SELECT LAST_INSERT_ID();

4) ALTER TABLE

  • AUTO_INCREMENT의 시작 번호를 다시 지정한다.
ALTER TABLE hongong2 AUTO_INCREMENT = 100;
INSERT INTO hongong2 VALUES (NULL, '재남', 32);
  • 결과

5) AUTO_INCREMENT의 증가하는 수 지정

  • 테이블 생성 후에 ‘SET @@auto_increment_increment = 원하는값'를 지정
CREATE TABLE hongong3(
    toy_id INT AUTO_INCREMENT PRIMARY KEY,
    toy_name CHAR(4),
    age INT
)

ALTER TABLE hongong3 AUTO_INCREMENT = 1000;
SET @@auto_increment_increment = 3;

INSERT INTO hongong3 VALUES (NULL, '토마스', 20);
INSERT INTO hongong3 VALUES (NULL, '제임스', 23);
INSERT INTO hongong3 VALUES (NULL, '고든', 25);
  • 결과

6) 여러 줄을 한 줄로 작성

-- 여러 줄 입력
INSERT INTO 테이블_이름 VALUES (값1, 값2, ...);
INSERT INTO 테이블_이름 VALUES (값3, 값4, ...);
INSERT INTO 테이블_이름 VALUES (값5, 값6, ...);

-- 한 줄 입력
INSERT INTO 테이블_이름 VALUES (값1, 값2, ...), (값3, 값4, ...), (값5, 값6, ...);

7) 다른 테이블의 데이터를 한 번에 입력하는 INSERT INTO ~ SELECT

  • 많은 양의 데이터를 지금까지 했던 방식으로 직접 타이핑해서 입력하려면 오랜 시간이 걸릴 것이다.
  • 다른 테이블에 이미 데이터가 입력되어 있다면, INSERT INTO ~ SELECT 구문을 사용해 해당 테이블의 데이터를 가져와서 한 번에 입력할 수 있다.

(1) 형식

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

 

(2) 예시

-- world DB의 city 테이블의 전체 행 개수 검색
SELECT COUNT(*) FROM world.city;
-- world DB의 city 테이블의 열 정보 검색 -> DESC 테이블명;
DESC world.city;
-- world DB의 city 테이블의 상위 다섯개 검색
SELECT * FROM world.city LIMIT 5;

-- 나의 DB에 정보를 복사하기 위해 테이블 생성
CREATE TABLE city_popul (city_name CHAR(35), population INT);

-- SELECT한 검색을 INSERT하기
INSERT INTO city_popul
	SELECT Name, Population FROM world.city;

2. 데이터 수정 : UPDATE

1) UPDATE문의 기본 문법

(1) UPDATE는 기존에 입력되어 있는 값을 수정하는 명령이다.

UPDATE 테이블_이름
	SET 열1 = 값1, 열2 = 값2, ...
	WHERE 조건;

 

(2) 예시

-- 영문 Seoul을 한국 서울로 변경하는 구문
UPDATE city_popul
    SET city_name = '서울'
    WHERE city_name = 'Seoul';
SELECT * FROm city_popul WHERE city_name = '서울';

-- 열을 여러 개 수정할 수도 있다.
UPDATE city_popul
    SET city_name = '뉴욕', population = 0
    WHERE city_name = 'New York';
SELECT * FROm city_popul WHERE city_name = '뉴욕';

-- 인구를 만 단위로 바꾸고 싶을 때 (WHERE 절 없이 사용)
UPDATE city_popul
	SET population = population / 10000;
SELECT * FROM city_popul LIMIT 5;

 

(3) 주의해야 할 점

  • WHERE 절을 빼게 되면, 모든 행의 값이 다 수정이 된다.

2) MySQL Workbench에서 UPDATE가 안 되는 경우

  • 오류 코드
    • 23:22:05
    • UPDATE city_popul SET city_name = 'Seoul' WHERE city_name = '서울'
    • Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.
    • 0.0010 sec
  • Setting(Prefrences)에서 SQL Editor을 누른 뒤에 가장 맨 아래에 체크되어 있는 ‘Safe Updates’의 체크박스를 해제하고, 프로그램을 종료하고 재시작한다.

3. 데이터 삭제 : DELETE

1) DELETE문의 기본 문법

  • DELETE는 행 데이터를 삭제하는 명령이다.

(1) 형태

DELETE FROM 테이블_이름 WHERE 조건;

 

(2) 예시

-- city_name이 New로 시작하는 행의 (전체)를 삭제하고 싶은 경우
DELETE FROm city_popul
	WHERE city_name LIKE 'New%';
	
-- city_name이 New로 시작하는 행의 (다섯 개만)를 삭제하고 싶은 경우
DELETE FROm city_popul
	WHERE city_name LIKE 'New%';
	LIMIT 5;
728x90

'웹 개발 > MySQL' 카테고리의 다른 글

[혼자공부하는SQL] 10강  (0) 2025.02.13
[혼자공부하는SQL] 9강  (1) 2025.02.13
[혼자공부하는SQL] 7강  (0) 2025.02.13
[혼자공부하는SQL] 6강  (0) 2025.02.13
[혼자공부하는SQL] 5강  (0) 2025.02.13