Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL数据插入验证_Mysql - Fatal编程技术网

MySQL数据插入验证

MySQL数据插入验证,mysql,Mysql,我不知道MySQL(或任何数据库)是否可以做到这一点,但我假设它可以做到 我有一个表,有多个字段。其中一个字段跟踪可用“项目”的总数,另一个字段保存当前正在使用的项目数 是否可以验证UPDATE语句中的传入数据,以便在使用的项目数大于可用的项目总数时更新将失败?IE我可以根据另一个字段的内容为该字段添加数字限制吗?假设您有两个表: Items ------------ ItemID NumAvailable ------------- Checkout ----------- UserID I

我不知道MySQL(或任何数据库)是否可以做到这一点,但我假设它可以做到

我有一个表,有多个字段。其中一个字段跟踪可用“项目”的总数,另一个字段保存当前正在使用的项目数


是否可以验证UPDATE语句中的传入数据,以便在使用的项目数大于可用的项目总数时更新将失败?IE我可以根据另一个字段的内容为该字段添加数字限制吗?

假设您有两个表:

Items
------------
ItemID
NumAvailable
-------------

Checkout
-----------
UserID
ItemID
-----------
您可以对
ItemID
求和,并与该特定项的
NumAvailable
进行比较。它看起来像这样(可能有错误,只提供了一般的想法:)。从中收集错误的方法,可能有更好的方法):


注意:
amount
是可更新的变量。它可能是1、2、3…

在更新之前,您基本上是在寻找一个
触发器来验证值。如果您需要创建触发器的帮助,请参阅。这不是我想要的。如果我理解正确的话。如果新金额大于允许的最大值,我希望更新失败。是更新将失败。请参见下面的示例。我在我的db tableupdate测试集中使用了use_pro=case,当total_pro>=1然后1 else use_pro endYep时,触发器看起来正是我想要的。令人遗憾的是,在SQL中,中止更新是一件非常麻烦的事情,但我想这是没办法的。谢谢
CREATE TRIGGER check_available 
BEFORE INSERT ON Checkout 
FOR EACH ROW 
BEGIN
  SELECT IF (COUNT(new.ItemID) > Items.NumAvailable) THEN
    DECLARE dummy INT;
        SELECT 'No more items to check out!' INTO dummy 
  FROM new NATURAL JOIN Items WHERE NEW.ItemID = Items.ItemID
  END IF;
END
update tableName set useItemColumnName= case when totalItemColumnName>=amount then amount else useItemColumnName end .