본문 바로가기
MySql

MySQL MYSQL : 삽입 중에 NULL 또는 빈 데이터를 기본값 0으로 만드는 방법

by 베이스 공부 2021. 1. 7.
반응형

그래서 이것은 매우 간단 해 보이며 이전에이 작업을 해본 적이 있다고 맹세합니다. 그러나 어떤 이유에서든 저에게 효과가 없습니다.

MAMP 를 사용하고 있으며 약 200 개의 열이있는 테이블이 있으며 NULL 또는 빈 데이터가 삽입되면 약 20 개가 기본값 0으로 설정됩니다.

다음은 내 테이블의 모양과 기본적으로 0으로 설정하려는 열에 대해 수행 한 작업에 대한 작은 예입니다.

CREATE TABLE `listings` (
  `ListingID` int(11) NOT NULL,
  `BathsFull` int(6) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ListingID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

따라서 BathsFull 에서 NOT NULL DEFAULT '0'으로 설정했습니다. 문제는 빈 데이터가 전달 될 때 SQLSTATE의 SQL 오류가 발생한다는 것입니다. [23000] : 무결성 제약 위반 : 1048 열 'BathsFull'은 null 일 수 없습니다 .

또한 BathsFull이 NULL DEFAULT '0'을 허용하도록 시도했지만 빈 데이터가 전달되면 테이블에 대신 NULL 이 표시됩니다. 0 .

여기에 뭔가 빠졌나요? 일종의 트리거를 작성해야합니까? 필요하지 않은 경우 DB에 넣기 전에 스크립트의 데이터를 스크럽하고 싶지 않습니다.

 

해결 방법

 

당신은 확실히 그것을 위해 트리거를 사용할 수 있습니다

필드를 nullable로 만든다고 가정합니다.

CREATE TABLE `listings` (
  `ListingID` int(11) NOT NULL,
  `BathsFull` int(6),              <-----
  PRIMARY KEY (`ListingID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

방아쇠

DELIMITER $$
CREATE TRIGGER tg_lst_insert BEFORE INSERT ON listings
FOR EACH ROW
BEGIN
    SET NEW.BathsFull = IFNULL(NEW.BathsFull, 0);
END $$
DELIMITER ; 

일부 행 삽입

INSERT INTO `listings` VALUES(1, '');
INSERT INTO `listings` VALUES(3, 'a');
INSERT INTO `listings` VALUES(4, NULL);
INSERT INTO `listings` (ListingID) VALUES(2);
INSERT INTO `listings` VALUES(5, 3);

결과

+-----------+-----------+
| ListingID | BathsFull |
+-----------+-----------+
|         1 |         0 |
|         2 |         0 |
|         3 |         0 |
|         4 |         0 |
|         5 |         3 |
+-----------+-----------+

 

참조 페이지 https://stackoverflow.com/questions/15814466

 

 

반응형

댓글