如果我有以下关系
Articles
articleId(PK)
title
content
date
并说我的企业约束是:
There may be only 10 articles in this table at anyone time
在mysql数据库上实现此企业约束的最佳方法是什么?它纯粹是由代码处理的吗?我应该更改数据库中的任何内容以强制执行此类约束吗?
答案 0 :(得分:1)
我会使用触发器。
你可以这样做:
DELIMITER $$
CREATE TRIGGER bi_articles_each BEFORE INSERT ON articles FOR EACH ROW
BEGIN
DECLARE number_of_articles INTEGER;
SELECT count(*) INTO number_of_articles FROM articles;
IF number_of_articles > 10 THEN
//select from a non_existing query to force an error and prevent the insert
SELECT error
FROM `There may be only 10 articles in the article table at anyone time`;
END IF;
END $$
DELIMITER ;
请参阅:
http://dev.mysql.com/doc/refman/5.0/en/triggers.html
http://www.databasedesign-resource.com/mysql-triggers.html
错误生成有点笨拙,但除此之外它就像一个魅力。我一直都在使用它。
触发器的好处在于,无论您使用何种插入向量,它都可以保证工作,并且它允许您保留(使用)标准SQL以进行插入,删除和更新,这非常方便。
答案 1 :(得分:0)
我会创建一个存储过程来插入专门用于插入文章的新文章。 在那里,我会检查您可能有的任何自定义约束。
如果违反了自定义约束,那么您可以向客户端发出违反约束的信号(例如通过返回变量)并跳过插入文章。