我的表由兩列組成: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
如果它們是外鍵,這是否意味着您有其他具有可空主鍵的表?這聽起來不對。 –