如果通过查询插入了空字符串,则将默认值设置为field

时间:2019-08-29 08:26:35

标签: mysql mariadb

所以我有一个表A,其中包含Z列,其默认值设置为字符串“ diverse”。 查询来自一个php脚本,该脚本从jqueryAJAX发布请求获取数据。

如果查询收到用于插入/更新此列的空字符串,我希望数据库将Z列的相应字段设置为默认值。

我真的很想使用mysql功能来完成此任务,而无需使用更多自定义编码的php逻辑。 我已经在这里阅读有关使用WHEN / THEN逻辑的信息: Set default value if empty string is passed MySQL 和这里 MySQL update CASE WHEN/THEN/ELSE

但是这些并不能解释我如何永久地配置表/列,以使其不仅在接收NULL值时而且在接收空字符串时都公开这种“默认”行为。

此外: 如果将列设置为NOT NULL并为该列添加默认值,如果我尝试将a / update插入NULL值,查询是否会失败,还是DB会翻转为默认值?

2 个答案:

答案 0 :(得分:1)

MySQL / MariaDB会将值放入您在插入/更新语句中指定的列。如果不提供值,将使用默认值(如果指定)。

如果即使插入/更新语句确实提供了一个值(NULL /空字符串),您也要使用默认值,则必须将逻辑放在某处。选项是将逻辑放在应用程序代码(PHP)中,或者如果要在MySQL / MariaDB中执行,则可以使用触发器检查新值并采取相应措施。

CREATE TRIGGER ins_A BEFORE INSERT ON A
FOR EACH ROW
BEGIN
  IF NEW.Z is null or NEW.Z='' THEN
    SET NEW.Z = 'diverse';
  END IF;
END;

并对UPDATE

执行相同操作

答案 1 :(得分:0)

请遵循以下两种情况:

create table Test
(
    a varchar(400)  not null default 'test',
    b varchar(10)
)
    collate = utf8mb4_unicode_ci;

Case 1: 
INSERT INTO Test (a, b) VALUES (NULL, 'case1');
=> resul: error because column a required not null;

Case 2:
INSERT INTO Test (b) VALUES ('case1');
=> OK, and result of column a = defaul value = test