问题描述
您绝对可以为此使用触发器
假设您将该字段设置为可空
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 accepts
NULL
and
DEFAULT‘0’设置为空,但是当传递空数据时,该表将显示,NULL
而不是0
。
我在这里想念什么吗?我需要编写某种触发器吗?如果不需要,我不想在将脚本中的数据放入数据库之前对其进行清理。