在一个查询 MYSQL 中插入和更新

Posted

技术标签:

【中文标题】在一个查询 MYSQL 中插入和更新【英文标题】:INSERT and UPDATE in one query MYSQL 【发布时间】:2014-02-09 20:31:42 【问题描述】:

我有一个简单的 INSERT 查询,它在单击按钮的事件时运行,它获取变量并将它们插入到 order 表中。

我还想更新我的bands 表以将库存减少 1 直到它达到 0 然后显示空值或售罄而不是变成负数,例如:-6

要知道我可以使用哪个乐队:

WHERE Band_id = $Band_id");

在同一个语句中。

当前的 INSERT 看起来像:

"INSERT INTO orders (band_id,user_id,user_name,band_name,band_venue) VALUES('$Band_id', '$user_id', '$user_name', '$name', '$venue')";

结论

需要将我的 INSERT 更改为 UPDATE WHILE 检查其当前选择的波段。

答案提供检查

这个解决方案提供得非常好,它很有意义,但我不够熟练,无法理解为什么它不能正常运行。

 $sql = "INSERT INTO orders (band_id,user_id,user_name,band_name,band_venue) VALUES('$Band_id', '$user_id', '$user_name', '$name', '$venue')";

 $sql_create ="CREATE TRIGGER tg_ai_orders
        AFTER INSERT ON orders
        FOR EACH ROW
          UPDATE bands 
          SET stock = stock - 1
          WHERE band_id = NEW.band_id";

$sql_deleat = "CREATE TRIGGER tg_ad_orders
        AFTER DELETE ON orders
        FOR EACH ROW
         UPDATE bands 
         SET stock = stock + 1
         WHERE band_id = OLD.band_id";

mysql_query ($sql, $sql_deleat, $sql_create, $linkme)
    or die ("could not add to database");

【问题讨论】:

您需要一个触发器来影响插入中的另一个表。 您可以使用两个单独的查询并将它们包装在一个事务中 好极了,我将如何使用触发器或将它们包装在事务中 【参考方案1】:

如果您要使用触发器方法,那么您将需要两个触发器(用于插入和删除)

CREATE TRIGGER tg_ai_orders
AFTER INSERT ON orders
FOR EACH ROW
  UPDATE bands 
     SET stock = stock - 1
   WHERE band_id = NEW.band_id;

CREATE TRIGGER tg_ad_orders
AFTER DELETE ON orders
FOR EACH ROW
  UPDATE bands 
     SET stock = stock + 1
   WHERE band_id = OLD.band_id;

这里是SQLFiddle演示

【讨论】:

+1 用于演示,谢谢你,peterm,我已经用你提供的答案更新了我的答案,你能告诉我这是否正确吗?因为它工作不正常 您所做的不正确。首先,您必须在对订单表发出任何插入或删除语句之前创建触发器。其次,您可以在 mysql 命令行客户端中执行两个 CREATE TRIGGER ... 语句,因为您只需执行一次。第三,你的mysql_query() 调用是错误的,因为它只接受两个参数:一个查询字符串和一个可选的链接标识符。如果想从 php 创建触发器,则必须一次执行每个查询。 好吧,我有点困惑,但想知道如何做到这一点,所以我尝试实现它。 您到底对什么感到困惑?您创建触发器一次的方式与创建表的方式相同。然后像往常一样在应用程序客户端代码中进行插入和删除操作。 好的,所以在myphpadmin中创建触发器,然后在php端插入和删除语句。

以上是关于在一个查询 MYSQL 中插入和更新的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql 5中记录特定表的插入/更新查询

MySQL 使用嵌套查询插入或更新

如果需要,插入更新 pdo mysql 查询并获取最后插入的 id

MySql学习之插入删除和更新

MySQL:非常慢的更新/插入/删除查询挂在“查询结束”步骤

MySQL查询结果复制到新表(更新插入)