【发布时间】:2017-11-26 18:17:26
【问题描述】:
我正在努力寻找解决方案来实现以下结果。
如果 MySQL 查询有空字符串 '',则使用表模式中定义的默认值。
例如
INSERT INTO `users`(`name`,`nickname`,`balance`)
VALUES ('hello','world','');
在这种情况下,如果余额列的默认值为0,那么应该设置它而不是空字符串。
有没有可能做到这一点?
【问题讨论】:
我正在努力寻找解决方案来实现以下结果。
如果 MySQL 查询有空字符串 '',则使用表模式中定义的默认值。
例如
INSERT INTO `users`(`name`,`nickname`,`balance`)
VALUES ('hello','world','');
在这种情况下,如果余额列的默认值为0,那么应该设置它而不是空字符串。
有没有可能做到这一点?
【问题讨论】:
更好的方法是创建触发器。在Mysql documentation 上阅读有关触发器的更多信息。更多细节的类似答案可以在here找到。
对于这个问题,这里是我对触发器的实现。
delimiter #
create trigger nonEmptyString
before insert
on users
for each row
BEGIN
IF NEW.balance = '' THEN
SELECT COLUMN_DEFAULT INTO @def
FROM information_schema.COLUMNS
WHERE
table_schema = 'Schema Name'
AND table_name = 'users'
AND column_name = 'balance';
SET NEW.balance = @def;
END IF;
end#
delimiter ;
注意:将 Schema Name 替换为您的架构名称。
【讨论】:
Schema Name。
使用变量(例如 $balance)而不是 ''(我希望您无论如何都会这样做)。
在查询前一行:
if(strlen(trim($balance))==0){ $balance='0'; }
您也可以使用 mysql 的 case 语法,虽然有点笨拙,但非常适合您的描述。
【讨论】: