mysql插入条件

时间:2012-11-29 21:41:05

标签: mysql insert conditional-statements

我有一个mysql数据库和一个插入内容的表单。如果有一行Status列等于“新”或“重新部署”并且是相同的$标签(这是他们输入到表单区域的内容),我想阻止添加一行

基本上我想阻止人们添加一个条目,如果那个$ tag已经存在状态为“new”或“redeploy”。有点难以解释

这是我当前的查询,任何帮助或想法将不胜感激。

mysql_query ("INSERT INTO Assets (`Badge`, `First Name`, `Last Name`, `Service Tag`, `Asset Tag`, `Status`, `Employee Status`, `Username`, `deleted`)
                     VALUES('$badge', '$first', '$last', '$tag', '$asset', '$status', '$estatus', '$user', '$deleted') ") or die (mysql_error());

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是在表上使用检查约束。这样,无论插入/更新如何,都将始终强制执行您的条件。

http://www.w3schools.com/sql/sql_check.asp

对于这样的事情,你可能也想创建一个函数。所以你的功能看起来像是:

CREATE FUNCTION CheckAssetRows(@Tag VARCHAR(50))
RETURNS INT
AS 
BEGIN
    DECLARE @NumInvalidRows INT

    SELECT @NumInvalidRows = COUNT(*) 
    FROM Asset 
    WHERE [Service Tag]=@Tag
    AND [Status] in ('New', 'Redeploy')

    RETURN @NumInvalidRows
END
GO

您的支票很简单:

ALTER TABLE ASSET
ADD CONSTRAINT chk_Tag CHECK(CheckAssetRows([Service Tag]) = 0)