微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据第一个表的主键插入多个mysql表

如何解决根据第一个表的主键插入多个mysql表

我正在尝试写入两个MysqL表。

表1:vehicles

-----------------------------------------------------------------
|  vehicle_id  |  vehicle_name  | vehicle_type  |  status  | 
-----------------------------------------------------------------

字段vehicle_id自动递增。我需要在下表speed_log中使用此字段。

这是另一个表。

表2:speed_log

 --------------------------------------
 |  id  |  vehicle_id  | speed  |
 --------------------------------------

如上所述,id自动递增的,但是在脚本运行时我需要从第一个表中选择vehicle_id。第二个表中的vehicle_id是外键。

这是我将数据写入表1的语法

//query
$query = "INSERT INTO vehicles SET vehicle_name=:vehicle_name,vehicle_type=:vehicle_type,status=:status";

//prepare query
$stmt = $this->conn->prepare($query);

// bind values
$stmt->bindParam(":vehicle_name",$this->vehicle_name);
$stmt->bindParam(":vehicle_type",$this->vehicle_type);
$stmt->bindParam(":status",$this->status);

// execute query
if($stmt->execute()) {
    $this->response_message = "Vehicle was registered successfully.";
    return true;
}
else {
    $this->response_message = "Unable to register vehicle ".json_encode($stmt->errorInfo()).".";
}
return false;

现在我的问题是两个:

  1. 我应该如何从表1中选择vehicle_id。
  2. 我的insert语句将如何将数据写入表2

解决方法

这是LAST_INSERT_ID()或其PDO变体的工作。

做这样的事情

// execute query
if($stmt->execute()) {
    $this->response_message = "Vehicle was registered successfully.";
    $vehicleId = $this->conn->lastInsertID();
    /* now do another INSERT to your second table using the value of `$vehicleId`. */
    return true;
}

无论做什么,都不要做类似的事情

SELECT 1 + MAX(vehicle_id) FROM vehicles;  /* wrong! */

因为如果有多个用户同时使用您的php程序,这是一种造成巨大混乱(竞赛条件)的臭名昭著的方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。