所以我有一个表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会翻转为默认值?
答案 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