我正在尝试找到一种解决方案来实现以下结果。
如果MySQL查询具有空字符串''
,则使用表模式中定义的默认值。
例如
INSERT INTO `users`(`name`,`nickname`,`balance`)
VALUES ('hello','world','');
在这种情况下,如果余额列的默认值为0
,则应设置它而不是空字符串。
有可能实现这个目标吗?
答案 0 :(得分:0)
您必须传递NULL或者根本不传递该字段才能获得默认值,因此
INSERT INTO `users`(`name`,`nickname`,`balance`)
VALUES ('hello','world',DEFAULT);
或
INSERT INTO `users`(`name`,`nickname`)
VALUES ('hello','world');
这在使用数据库列默认值时有效。
编辑: 创建表时定义默认值,例如
CREATE TABLE `users` (
`name` varchar(45) NOT NULL,
`nickname` varchar(45) NOT NULL,
`balance` int(11) NOT NULL DEFAULT '0'
)
答案 1 :(得分: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 ;
注意:将架构名称替换为架构名称。
答案 2 :(得分:0)
使用变量(例如$ balance)代替'' (我希望你无论如何都会这样做。)
在查询之前的行:
if(strlen(trim($balance))==0){ $balance='0'; }
您也可以使用mysql案例语法,这有点笨拙,但非常适合您的描述。