如果传递空字符串,则设置默认值MySQL

时间:2017-06-23 08:38:04

标签: mysql database mysqli schema

我正在尝试找到一种解决方案来实现以下结果。

如果MySQL查询具有空字符串'',则使用表模式中定义的默认值。

例如

INSERT INTO `users`(`name`,`nickname`,`balance`) 
VALUES ('hello','world','');

在这种情况下,如果余额列的默认值为0,则应设置它而不是空字符串。

有可能实现这个目标吗?

3 个答案:

答案 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案例语法,这有点笨拙,但非常适合您的描述。

MySQL update CASE WHEN/THEN/ELSE