Server/MariaDB

[MariaDB] insert

클리엘 2021. 6. 7. 11:15
728x90

insert는 데이터를 삽입하며 다음과 같이 구현합니다.

insert into tb_user (userNumber, userName, userAge, userAddress, userJoinDate, userUse)
values
('CCC-000003', '홍길영', '35', '대구 광역시', now(), 1);

만약 여러 건(Row)의 데이터를 삽입하는 경우라면 , (콤마)로 각 행의 데이터를 구분하여 추가할 수 있으며

insert into tb_user (userNumber, userName, userAge, userAddress, userJoinDate, userUse)
values
('CCC-000003', '홍길영', '35', '대구 광역시', now(), 1),
('DDD-000004', '홍길석', '40', '광주 광역시', now(), 1);

다른 테이블에 존재하는 데이터를 가져와 추가하는 경우라면 insert into와 select구문을 결합할 수 있습니다.

insert into tb_user (userNumber, userName, userAge, userUse)
select userNumber, userName, userAge, userUse
from tb_user2 ;

여러건의 데이터는 insert구문을 그 만큼 여러개 생성하여 처리하는 경우도 있는데 한꺼번에 모든 insert 구문을 실행하는 경우에는 한건만 오류가 나도 전체 동작이 멈추는 상황이 발생할 수 있습니다. 이럴 때는 insert에 ignore키워드를 붙여주면 됩니다.

insert ignore into tb_user (userNumber, userName, userAge, userUse) values ('CCC-000003', '홍길영', '35', 1);
insert ignore into tb_user (userNumber, userName, userAge, userUse) values ('DDD-000004', '홍길숙', '40', 1);

위와 같이 하면 오류가 나도 그 다음 insert 구문을 그대로 실행할 수 있게 됩니다.

 

추가할 데이터가 테이블의 컬럼과 일치한다면 컬럼명을 생략해 줄 수 있습니다.

insert into tb_user
values
('CCC-000003', '홍길영', '35', '대구 광역시', now(), 1);

하지만 특정 컬럼의 데이터만 삽입하는 경우라면 컬럼명과 데이터의 순서를 맞춰서 추가하여야 하며

insert into tb_user (userNumber, userName, userAge, userUse)
values
('CCC-000003', '홍길영', '35', 1),
('DDD-000004', '홍길석', '40', 1);

테이블에 특정 컬럼이 다음과 같이 자동 증가(AUTO_INCREMENT)를 사용하는 경우

CREATE TABLE `tb_user` (
  `userSeq` int(11) NOT NULL AUTO_INCREMENT,
  `userNumber` varchar(10) NOT NULL,
  `userName` varchar(50) NOT NULL,
  `userAge` int(11) DEFAULT NULL,
  `userAddress` varchar(100) DEFAULT NULL,
  `userJoinDate` datetime DEFAULT NULL,
  `userUse` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`userSeq`,`userNumber`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

자동 증가되는 컬럼은 insert에서 생략하고 데이터를 삽입합니다. 만약 컬럼을 지정해 주는 경우라면 값을 NULL로 지정해야 합니다.

 

현재의 자동증가값을 확인하려면 last_insert_id() 함수를 사용할 수 있습니다.

select last_insert_id(); 

임의로 자동증가값을 지정하고자 한다면 다음과 같이 테이블의 auto_increment값을 조정해 주면 됩니다.

alter table tb_user auto_increment = 10;

자동 증가 값은 통상 1씩 증가되지만 서버 변수인 @@auto_increment_increment값을 변경하면 그만큼 자동 증가되는 값을 조정할 수 있습니다.

set @@auto_increment_increment = 1;

insert 구문이 수행되는 경우 주어진 값이 이미 존재하는 동일한 키값인 경우 해당 조건에 따라 데이터를 update시키는 것도 가능합니다.

insert into tb_user (userSeq, userNumber, userName, userAge, userUse) values (3, 'CCC-000003', '홍길영', '35', 1)
on duplicate key update userName = '홍길숙', userAge = 27;

만약 위 예제에서 userSeq가 키이고 이미 userSeq에 3이라는 값이 존재하는 경우 데이터를 insert 시키는 대신 하위에주어진 update 구문을 실행하게 됩니다.

728x90