일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 레디스
- 자바의 정석
- 실행 컨텍스트
- sqld
- spring security
- 호이스팅
- 스프링부트
- 분할정복
- github
- SQL
- 이벤트루프
- Redis
- 영속성 컨텍스트
- 정보처리기사
- 다이나믹프로그래밍
- document database
- 동적계획법
- VMware
- 게시판
- 캐시
- 스프링 부트
- NoSQL
- MongoDB
- Spring Boot
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- JPA
- 깃허브
- 스프링 시큐리티
- in-memory
- 정처기
- Today
- Total
FreeHand
[MySQL] INSERT 본문
INSERT문 기본 구조
INSERT INTO 테이블(칼럼1, 칼럼2, ...) VALUES (값1, 값2, ...);
여러 행을 한번에 입력
INSERT INTO 테이블 VALUES (값1, 값2, ...), (값1, 값2, ...);
CREATE TABLE test (id int, userName char(3), age int);
INSERT INTO test(id, userName, age) VALUES (1, '배수지', 30);
SELECT * FROM test;
실습용 테이블을 만들고 데이터를 삽입했다.
INSERT INTO test(int, userName, age) VALUES (2, '권은비');
칼럼의 개수와 넣으려는 값의 개수가 다르면 오류가 발생한다.
INSERT INTO test(id, userName) VALUES (2, '권은비');
빠진 속성값은 null이 들어간다.
INSERT INTO test VALUES (3, '이지은', 31);
칼럼을 생략할 경우에는 VALUES 이후 값들의 개수 및 순서가 테이블에 정의된 칼럼 개수 및 순서와 동일해야 한다.
AUTO_INCREMENT
CREATE TABLE test2
(id int AUTO_INCREMENT PRIMARY KEY,
userName char(3),
age int);
속성을 AUTO_INCREMENT로 지정하면 1부터 자동으로 증가하는 값을 입력한다.
AUTO_INCREMENT로 지정할 때는 PRIMARY KEY 또는 UNIQUE로 지정해줘야 하고 숫자 데이터만 사용 가능하다.
INSERT INTO test2 VALUES (NULL, '배수지', 30);
INSERT INTO test2 VALUES (NULL, '권은비', 29);
INSERT INTO test2 VALUES (NULL, '이지은', 31);
id값은 자동으로 입력되므로 NULL 값을 지정해야 한다.
ALTER TABLE test2 AUTO_INCREMENT=100;
INSERT INTO test2 VALUES (NULL, '제니', 28);
자동 증가하는 시작값을 바꿀수 있다.
SELECT LAST_INSERT_ID();
자동으로 입력된 마지막 값을 확인할 수도 있다.
SET @@auto_increment_increment=5;
INSERT INTO test2 VALUES (NULL, '지수', NULL), (NULL, '리사', NULL), (NULL, '로제', NULL);
증가값을 5씩 증가하도록 변경했다.
100에서 105가 아닌 101로 값이 입력되었다. 현재값이 입력이 되고 자동 증가가 된 다음에 변경사항이 적용되었다.
CREATE TABLE test3 (id int, name char(3));
INSERT INTO test3 (id, name)
SELECT id, userName FROM test2;
SELECT문으로 기존 테이블의 데이터를 입력할 수 있다.
조건부 데이터 입력, 변경
CREATE TABLE member1 (SELECT userID, name, addr FROM usertbl LIMIT 3);
ALTER TABLE member1
ADD CONSTRAINT pk_member1 PRIMARY KEY (userID);
SELECT * FROM member1;
usertbl 테이블에서 일부를 복사하여 member1 테이블을 만들었다.
테이블을 복사하면 제약조건은 복사되지않기때문에 따로 PK를 지정했다.
INSERT INTO member1 VALUES ('BBK', '바비킹', '뉴욕');
INSERT INTO member1 VALUES ('SJH', '서장훈', '서울');
INSERT INTO member1 VALUES ('HJY', '현주엽', '경기');
'BBK'로 PK가 중복되면서 오류가 발생했다.
이후에 2개의 SQL도 수행되지 않았다.
INSERT IGNORE INTO member1 VALUES ('BBK', '바비킹', '뉴욕');
INSERT IGNORE INTO member1 VALUES ('SJH', '서장훈', '서울');
INSERT IGNORE INTO member1 VALUES ('HJY', '현주엽', '경기');
PK 중복 오류를 발생시키는 첫번째 문장은 그냥 넘어가고 두번째 문장부터는 정상적으로 값이 입력되었다.
IGNORE를 사용해서 오류를 발생시키지 않고 무시하고 넘어간 것이다.
INSERT INTO member1 VALUES ('BBK', '바비킹', '뉴욕')
ON DUPLICATE KEY UPDATE name = '바비킹', addr = '뉴욕';
INSERT INTO member1 VALUES ('YJS', '유재석', '서울')
ON DUPLICATE KEY UPDATE name = '유재석', addr = '서울';
SELECT * FROM member1;
ON DUPLICATE UPDATE를 사용하면 PK가 중복되지 않으면 INSERT를 수행하고, 중복되면 UPDATE문이 수행된다.
'Database' 카테고리의 다른 글
[MySQL] DELETE (0) | 2023.11.01 |
---|---|
[MySQL] UPDATE (0) | 2023.11.01 |
[MySQL] GROUP BY와 집계 함수 (0) | 2023.10.30 |
[MySQL] 테이블 복사 (0) | 2023.10.30 |
[MySQL] 서브쿼리와 ANY, ALL (0) | 2023.10.30 |