【问题标题】:SQL: Auto insert the a value from another tableSQL:自动插入另一个表中的值
【发布时间】:2021-09-17 13:24:19
【问题描述】:

我有两张桌子,第一张是“学生”:


    id (PK) "auto_inc"
    student_name
    email

第二个是“账单”:


    id (PK) "auto_inc"
    student_id (FK -> id)
    total_balance

当我在同一查询中添加新学生时,我试图将最后一个“id”自动插入“student_id”。 这是我向表中添加新学生的查询

insert into student (name, major, emailAddress)
   values ( :name, :major, :emailAddress )

例如:

id= 1
student_name= "Mike"
email= "mike@mail.com"

bill table:
id= 1
student_id= 1 "from 'student' table"
total_balance= 100

我对 SQL DB 没有太多经验,我最近在使用它。

【问题讨论】:

  • 寻找LAST_INSERT_ID()。在第一个查询之后,您可以将其调用为第二个查询中需要使用的 id。
  • 您不能通过一个查询将数据插入到两个表中。您可以使用 PHP 代码中的两个连续查询来执行此操作,也可以编写一个存储过程来执行此操作。
  • 或者您可以尝试使用TRIGGER,如记录的here。在表student上插入后创建触发器,在这个触发器内,您可以编写语句插入到bill
  • 对 MySQL 使用 LAST_INSERT_ID()。首先插入学生表。然后插入账单。将有 2 个插入查询。第一个是学生,第二个是账单。在存储过程中编写这两个查询。

标签: php mysql sql database


【解决方案1】:

我可以建议下一个方法:

  1. 使用唯一键 email 创建表 student
create table student (
  id int primary key auto_increment,
  student_name varchar(255),
  email varchar(255) unique key
);
  1. 使用下一个 PHP 代码:
<?php

$name = "Barry Block";
$email = "barry.b@gmail.com";
$balance = 500;

$student_sql = "
    insert into student (student_name, email)
    values ( :name, :emailAddress )";

$stmt = $pdo->prepare($student_sql);
$stmt->execute([':name'=>$name, ':emailAddress'=>$email]);

$bill_sql = "
    insert into bill (student_id, total_balance)
    select id, :balance from student where email = :emailAddress";

$stmt = $pdo->prepare($bill_sql);
$stmt->execute([':balance'=>$balance, ':emailAddress'=>$email]);

Test MySQL & PHP code online

【讨论】:

  • 既然是两个查询,为什么不会只使用第一个查询中最后插入的Id?这个答案回避了这个问题,而且你并不总是能够做到这一点。
猜你喜欢
  • 2021-07-16
  • 1970-01-01
  • 2010-10-09
  • 2012-03-24
  • 1970-01-01
  • 2013-08-16
  • 2021-01-18
  • 1970-01-01
  • 2020-11-25
相关资源
最近更新 更多