在MySql数据库关系上实施企业约束

时间:2011-08-29 12:33:41

标签: php mysql sql database constraints

如果我有以下关系

Articles
articleId(PK)
title
content
date

并说我的企业约束是:

There may be only 10 articles in this table at anyone time

在mysql数据库上实现此企业约束的最佳方法是什么?它纯粹是由代码处理的吗?我应该更改数据库中的任何内容以强制执行此类约束吗?

2 个答案:

答案 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)

我会创建一个存储过程来插入专门用于插入文章的新文章。 在那里,我会检查您可能有的任何自定义约束。

如果违反了自定义约束,那么您可以向客户端发出违反约束的信号(例如通过返回变量)并跳过插入文章。