MYSQL:如何在插入过程中使NULL或空数据默认为0

问题描述

您绝对可以为此使用触发器

假设您将该字段设置为可空

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 |
+-----------+-----------+

解决方法

因此,这似乎很简单,我发誓我以前做过,但是出于某种原因,它对我不起作用。

我正在使用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'问题是,当将空数据传递给它时,出现SQL错误SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'BathsFull' cannot be null

我也尝试过将BathsFull acceptsNULL
andDEFAULT‘0’设置为空,但是当传递空数据时,该表将显示,NULL而不是0

我在这里想念什么吗?我需要编写某种触发器吗?如果不需要,我不想在将脚本中的数据放入数据库之前对其进行清理。