【问题标题】:mysql insert with conditionsmysql 插入条件
【发布时间】:2012-11-18 02:03:28
【问题描述】:

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

基本上,如果 $tag 已经存在且状态为“新”或“重新部署”,我想阻止人们添加条目。有点难以解释

这是我目前的查询,如果有任何帮助或想法,我们将不胜感激。

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());

【问题讨论】:

    标签: mysql insert conditional-statements


    【解决方案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)
    

    【讨论】:

    • 我的编辑应该有助于您入门。没有经过测试,我只是把它放在一起。
    • 我仍然在努力不断给出不正确的语法来尝试创建函数。经过几次修改,我可以让它说“#1415 - 不允许从函数返回结果集”还有什么额外的建议吗? :)
    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2011-01-14
    • 2013-01-29
    • 2017-07-27
    • 1970-01-01
    相关资源
    最近更新 更多