我的表由两列组成:A和B,它们都是可以为空的,并且是来自其他表的外键。我该如何施加一个约束,即A或B中至少有一个不应该为空?MySQL:两个字段中的至少一个的约束
2
A
回答
0
可能的答案:请提供意见,如果有一个更好的解决方案。
我发现this由Roland Bouman提供的解决方案。根据他的方案的精神,这里是我有:
delimiter go
create procedure validateAtLeastOneValue(
in a bigint(16), in b bigint(16)
)
deterministic
no sql
_main: begin
declare err_no value_specified condition for sqlstate '45000';
if a is not null then
leave _main; -- nothing to validate
end if;
if b is not null then
leave _main; -- nothing to validate
end if;
signal err_no_value_specified -- raise an error
set message_text = 'No value specified';
end;
go
delimiter ;
现在,从上表中插入(或更新)的事件处理程序调用该程序。
create trigger on_before_insert
before insert on mytable
for each row
begin
call validateAtLeastOneType(
NEW.a
, NEW.b
);
end;
create trigger on_before_update
before update on mytable
for each row
begin
call validateAtLeastOneType(
NEW.a
, NEW.b
);
end;
0
相关问题
- 1. SQL约束“两个属性中的至少一个”
- 2. django中的两个字段的约束
- 3. MySQL:约束一组列,所以至少有一个不是NULL
- 4. 至多Perl的正则表达式和至少一个字符的约束
- 5. Elasticsearch字段约束中的多个字段约束条件
- 6. MongoDB中的两个字段的唯一约束
- 7. 我需要一个检查约束两列,至少有一个不能为空
- 8. PostgreSQL中两个唯一字段的设置约束
- 9. MySql - 对两个不同的字段组合应用相同的唯一约束
- 10. 唯一约束在两个字段和他们的反向
- 11. Typo3 Formhandler:如何验证typoscript中两个字段中的至少一个
- 12. 至少有一个输入字段(jQuery)
- 13. 要求两个字段中的至少一个在VueJS 2.0上使用VE-validate
- 14. 检查两个输入字段中的至少一个是否有数据
- 15. '至少有一个选择'遗传算法约束
- 16. 设置SQL中两个字段之间的约束
- 17. 以下列表中的至少一个约束可能是您不想要的约束
- 18. 与至少两个不同的字母
- 19. Mysql添加约束:强制一个字段获取特定值
- 20. SQL约束:两个属性,至少一个外键在同一个表上匹配
- 21. JSF所需的至少一个/多个字段组
- 22. 一个mysql表的难度约束
- 23. 如何在Grails中的两个外部字段上设置唯一约束?
- 24. 我如何在MySQL中有一个涉及ForeignKey字段的unique_together约束?
- 25. Access 2003中多个字段的唯一约束
- 26. SQL:约束强制执行至少一个&&最大为每个关键
- 27. MySQL的两个字段
- 28. SqlServer约束字段值依赖于另一个字段值
- 29. Mysql的唯一约束只适用,如果一个字段有specfic值
- 30. 根据LibreOffice基础中的另一个表字段创建字段约束
MySQL根本不支持检查约束。 [从文档](http://dev.mysql.com/doc/refman/5.1/en/create-table.html)“CHECK子句已解析,但被所有存储引擎忽略。” – Andomar
删除了答案,我没有意识到你正在使用MySQL。 – ClaireG
如果它们是外键,这是否意味着您有其他具有可空主键的表?这听起来不对。 –