[mysql]Error Code: 1292. Truncated incorrect DOUBLE value: 'abc' (궁금한거 아직 안찾)

ynoolee·2021년 10월 4일
0

mysql

목록 보기
1/1

Error Code: 1292. Truncated incorrect DOUBLE value: 'abc'

상황

그저 Database index를 공부하고 싶었다.
책을 보고 개념을 조금 알고는 유튜브에 있는 영상을 보는데 프로시져를 사용하고 있었다

  • 프로시져를 사용해본 적 없었고 + 대용량의 데이터를 이런식으로 procedure를 이용하여 insert 해 줄 수 있구나 라는 생각에 , MySQL에서 procedure를 이용하여 10만개의 데이터를 넣어주는 것을 해 보기로 했다.
    영상 속 DB는 MSSQL이었고, 내가 사용하는 DB는 MySQL이었다.
    문법을 찾아보며
```java
USE `security`;
DROP procedure IF EXISTS `add_datas`;

DELIMITER $$
USE `security`$$
CREATE PROCEDURE `add_datas` ()
BEGIN
	DECLARE counter INT;
    declare name varchar(50);
    declare email varchar(50);
    declare dept varchar(10);
    set counter =1;
    while(counter <=100000) DO
		SET name = 'ABC' +RTRIM(counter);
        SET email = 'abc'+RTRIM(counter)+'@naver.com';
        SET dept = 'Dept'+RTRIM(counter);
        
        INSERT INTO employee values(name,email,dept);
        SET counter = counter+1;
        if(counter%10000=0) THEN 
			SELECT RTRIM(counter)+' rows inserted';
            END IF;
	END WHILE;
END$$

DELIMITER ;

다음을 완성했다.
하지만

call add_datas;

를 하니 에러가 나왔다.
💥💥💥Error Code: 1292. Truncated incorrect DOUBLE value: 'abc'
이 말을 보고는 이유를 전혀 모르겠었다. 데이터 타입을 text로 변경해 보기도 했지만 역시 소용없었다.

해결 : concat

  • MySQL에서는 문자와 문자를 합치기 위해 CONCAT() 함수를 사용한다.
CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `add_datas`()
BEGIN
	DECLARE counter INT;
    declare name  varchar(50);
    declare email varchar(50);
    declare dept varchar(50);
    SET counter =1;
    while(counter <=100000) DO
		SET 
			name = concat('ABC',RTRIM(counter)),
            email = concat('abc',RTRIM(counter),'@naver.com'),
            dept = concat('Dept',RTRIM(counter));
        
        INSERT INTO employee values(null,name,email,dept);
        SET counter = counter+1;
        if(counter%10000=0) THEN 
			SELECT RTRIM(counter)+' rows inserted';
            END IF;
	END WHILE;
END

다음과 같이 변경하니 에러가 뜨지 않게 되었다.

Lost connection to server during query

  • MySQL workbench에서 프로시저를 호출하고 있던 도중 서버로의 connection을 잃었다는 메시지가 떴다.
  • MySQL workbench의 preferences를 변경하였다.
    기본 : 600,60,10 이었던 것 같다.

결과화면

10000개가 insert될때마다 select 문을 통해 띄우게 했다.


궁금

  • RDBMS에 샘플 데이터를 넣을 때는 이런 procedure를 자주 사용할까?

0개의 댓글