[MySQL] 데이터 변경을 위한 SQL문
🚀 INSERT: 데이터 입력
💡 INSERT문 기본 문법
🔵 테이블 이름 뒤에 나오는 열 생략 가능
단, 열 이름 생략시 VALUES 다음에 나오는 값들의 순서 및 개수는 테이블의 열 순서 및 개수와 동일해야 함
INSERT INTO 테이블 [(열1, 열2, ...)]
VALUES (값1, 값2, ...);
🔵 특정 열에만 데이터를 입력하려는 경우
테이블 이름 뒤에 입력할 열의 이름 입력 👉 이 경우 생략한 열에는 NULL 값 들어가게 됨
CREATE TABLE hongong1 (toy_id INT, toy_name CHAR(4), age INT);
INSERT INTO hongong1 (toy_id, toy_name) VALUES (2, '버즈');
🔵 열의 순서를 바꿔 입력하고 싶은 경우
열 이름과 값을 원하는 순서에 맞춰 입력
INSERT INTO hongong1 (toy_name, age, toy_id) VALUES ('제시', 20, 3);
💡 AUTO_INCREMENT
- 열을 정의할 때 1부터 증가하는 값을 자동 입력
- INSERT문에서는 해당 열이 없다고 생각하고 NULL 값으로 입력해주면 됨
- 단, AUTO_INCREMENT로 지정하는 열은 반드시 PRIMARY KEY로 지정해야 함
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);
SELECT * FROM hongong2;
[실행 결과]
toy_id | toy_name | age |
---|---|---|
1 | 보핍 | 25 |
2 | 슬링키 | 22 |
3 | 렉스 | 21 |
👀 LAST_INSERT_ID()
AUTO_INCREMENT로 지정한 열에 현재 어디까지 입력되었는지 확인하는 함수
SELECT LAST_INSERT_ID();
[실행 결과]
LAST_INSERT_ID() |
---|
3 |
👀 입력 값 변경(1)
AUTO_INCREMENT로 입력되는 다음 값을 다른 값으로 변경하고 싶은 경우 아래와 같이 사용
ALTER TABLE hongong2 AUTO_INCREMENT = 100;
INSERT INTO hongong2 VALUES (NULL, '재남', 35);
SELECT * FROM hongong2;
[실행 결과]
toy_id | toy_name | age |
---|---|---|
1 | 보핍 | 25 |
2 | 슬링키 | 22 |
3 | 렉스 | 21 |
100 | 재남 | 35 |
👀 입력 값 변경(2)
- 초기 입력 값 지정(1000) 및 1003, 1006, 1009, … 으로 step을 설정하고 싶은 경우 시스템 변수인 @@auto_increment_increment 변경
시스템 변수
- MySQL에서 자체적으로 가지고 있는 설정값이 저장된 변수로 주로 MySQL의 환경과 관련된 내용이 저장되어 있으며, 그 개수 500개 이상
- 앞에 @@가 붙는 것이 특징이며, 시스템 변수의 값을 확인하려면
SELECT @@시스템변수
실행 - 전체 시스템 변수의 종류를 알고 싶을 때는
SHOW GLOBAL VARIABLES
실행
CREATE TABLE hongong3 (
toy_id INT AUTO_INCREMENT PRIMARY KEY,
toy_name CHAR(4),
age INT);
ALTER TABLE hongong3 AUTO_INCREMENT = 1000; -- 시작값 1000으로 지정
SET @@auto_increment_increment = 3; -- 증가값 3으로 지정
INSERT INTO hongong3 VALUES (NULL, '토마스', 20);
INSERT INTO hongong3 VALUES (NULL, '제임스', 23);
INSERT INTO hongong3 VALUES (NULL, '고든', 25);
SELECT * FROM hongong3;
[실행 결과]
toy_id | toy_name | age |
---|---|---|
1000 | 토마스 | 20 |
1003 | 제임스 | 23 |
1006 | 고든 | 25 |
👀 여러 줄을 한줄로 작성
INSERT INTO table_name VALUES (value1, value2, ...), (value3, value4, ...), (value5, value6, ...);
💡 INSERT INTO ~ SELECT
다른 테이블의 데이터를 한 번에 입력시 사용
INSERT INTO table_name (col_name1, col_name2, ...)
SELECT문 ;
INSERT INTO city_popul
SELECT Name, Population FROM world.city;
👀 DESC 명령(Describe)
테이블 구조 확인
DESC world.city; -- 데이터베이스_이름.테이블_이름
[실행 결과]
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | NO | PRI | auto_increment | |
Name | char(35) | NO | |||
CountryCode | char(3) | NO | MUL | ||
District | char(20) | NO | |||
Population | int | NO | 0 |
🚀 UPDATE: 데이터 수정
💡 UPDATE문 기본 문법
UPDATE 테이블_이름
SET 열1=값1, 열2=값2, ...
WHERE 조건 ;
💡 WHERE가 없는 UPDATE문
- UPDATE문에서 WHERE절은 문법상 생략이 가능하지만, WHERE절을 생략하면 모든 행의 값이 변경되므로 주의
- 예) 모든 인구 열(population)을 한꺼번에 10,000으로 나누기 (전체 적용하는 경우 사용 가능)
UPDATE city_popul
SET population = population / 10000;
🚀 DELETE: 데이터 삭제
💡 DELETE문 기본 문법
DELETE FROM 테이블_이름 WHERE 조건 ;
조건에 해당하는 일부(예를 들어 상위 5건)만 삭제도 가능
DELETE FROM 테이블_이름 WHERE 조건 LIMIT 5 ;
💡 대용량 테이블의 삭제
👉 DELETE
, DROP
, TRUNCATE
세 가지 방법 존재
DELETE | DROP | TRUNCATE |
---|---|---|
데이터 삭제 | 테이블 자체 삭제 | 데이터 삭제(DELETE와 동일한 효과) |
삭제시 시간 많이 소요 | 속도 빠름 | 속도 빠름 |
테이블 구조 O | 테이블 구조 X | 테이블 구조 O |
- TRUNCATE는 DELETE와 달리 WHERE문을 사용할 수 없으므로 조건 없이 전체 행을 삭제할 때만 사용
- 결론적으로, 대용량 테이블의 삭제시 아래의 경우가 효율적!
- 테이블 자체가 필요없는 경우 👉 DROP
- 테이블 구조는 남겨놓을 경우 👉 TRUNCATE
Leave a comment