Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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_Sql_Triggers_Mariadb - Fatal编程技术网

Mysql触发器在插入当前表后更新其他表

Mysql触发器在插入当前表后更新其他表,mysql,sql,triggers,mariadb,Mysql,Sql,Triggers,Mariadb,我有两张桌子。一个叫做“借来的”,另一个叫做“设备”。我在设备表中有一个字段,默认设置为0。我希望在添加表中“借用”的条目时。表“设备”中的条目由触发器设置为1。表ID“借用”的确切位置=表ID为“设备” 我意识到这一点的想法是: BEGIN UPDATE `devices` SET devices.borrowed = "1" WHERE devices.id = borrowed.id LIMIT 1; END 或 我的结果是所有记录都设置为1,而不

我有两张桌子。一个叫做“借来的”,另一个叫做“设备”。我在设备表中有一个字段,默认设置为0。我希望在添加表中“借用”的条目时。表“设备”中的条目由触发器设置为1。表ID“借用”的确切位置=表ID为“设备”

我意识到这一点的想法是:

BEGIN

   UPDATE `devices` 

    SET devices.borrowed = "1"

    WHERE devices.id = borrowed.id

    LIMIT 1;
END


我的结果是所有记录都设置为1,而不仅仅是序列号相同的记录。使用LIMIT命令,他只将1设置为正确的值,但序列号错误的设备被设置为1。

我猜您使用的是MySQL,您希望这样

CREATE TRIGGER trg_borrowed_insert AFTER INSERT ON borrowed
FOR EACH ROW
BEGIN
   UPDATE devices
       SET devices.borrowed = 1
       WHERE devices.id = new.id;
END;

我认为触发器不是实现这种逻辑的好方法。外键关系和
JOIN
应该可以确定借用了哪些设备。如果您需要一个触发器来执行
插入操作
,那么
删除操作
更新操作
也需要一个触发器,我猜您使用的是MySQL,您需要这样的触发器

CREATE TRIGGER trg_borrowed_insert AFTER INSERT ON borrowed
FOR EACH ROW
BEGIN
   UPDATE devices
       SET devices.borrowed = 1
       WHERE devices.id = new.id;
END;

我认为触发器不是实现这种逻辑的好方法。外键关系和
JOIN
应该可以确定借用了哪些设备。如果您需要一个触发器来触发
插入
,您还需要一个触发器来触发
删除
更新

用您正在使用的数据库标记您的问题。表中是否有多行<代码>限制1如果没有ORDER BY可能会不可预测地选择一行。请使用您正在使用的数据库标记您的问题。表中是否有多行<代码>限制1没有ORDER BY可能会不可预测地选择一行。