반응형
그래서 이것은 매우 간단 해 보이며 이전에이 작업을 해본 적이 있다고 맹세합니다. 그러나 어떤 이유에서든 저에게 효과가 없습니다.
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
반응형
'MySql' 카테고리의 다른 글
MySQLi를 사용하여 MySQL 데이터베이스에 행 삽입 (0) | 2021.01.07 |
---|---|
MySQL 너무 많은 MySQL 데이터베이스를 삭제 한 후 XAMPP를 수정하는 방법은 무엇입니까? (0) | 2021.01.07 |
MySQL 특정 값에 대한 MySQL 개수 열 (0) | 2021.01.07 |
MySQL 오류 1241 : 피연산자는 1 개의 열을 포함해야합니다. (0) | 2021.01.07 |
MySQL 10 진수 필드로 실패한 MySql 쿼리보다 크거나 작음 (0) | 2021.01.07 |
댓글