在一个查询 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 中插入和更新的主要内容,如果未能解决你的问题,请参考以下文章
如果需要,插入更新 pdo mysql 查询并获取最后插入的 id