0

我有两张桌子:

Customer具有自动增量字段ID和主键和

address带有customer_ID作为外键的字段。

我有一个表格,要求提供所有客户信息及其地址(可以超过 1 个)

我运行以下两个查询来更新数据库,但是我目前正在Customer_ID手动输入值以对其进行测试。

mysql_query("INSERT INTO customer(First_Name, Surname, Company_Name, Telephone, Alt_Telephone)VALUES('$fName', '$lName', '$cName', '$tel', '$altTel')") ;
mysql_query("INSERT INTO address(line_1, line2, town, postcode, customer_ID)VALUES('$line1', '$line2', '$town', '$post_code', '2')") ;

customer_ID字段应与ID客户表中的当前字段相同,如何确保在填写地址表时自动执行此操作?

4

2 回答 2

2

使用 PHP

解决您的问题的最简单方法是在您第一次调用(将数据插入您的表customermysql_insert_id )之后调用您的 php 代码。mysql_query

此函数将返回最后插入的 id,但您必须确保customer的 id是自动递增的主键。

返回的值mysql_insert_id是给定连接/会话的本地值,即使在您完成后另一个连接插入了一条记录,您也会得到您插入的 id。


使用 MySQL

您可以使用下面的 SQL 函数LAST_INSERT_ID(),只需确保之前运行的 sql-query 是插入到customer中(以及检查 id 确实是一个 key 并且auto-incremented)。

-- first insert into `customer`

INSERT INTO address
  address(line_1, line2, town, postcode, customer_ID)
VALUES
  ('$line1', '$line2', '$town', '$post_code', LAST_INSERT_ID());

这里与php-version相同,LAST_INSERT_ID()将检索您最后插入的 ID。


您还可以使用可以描述为SELECT INTO的 SQL 功能,请参见以下代码段:

INSERT INTO address
 address(line_1, line2, town, postcode, customer_ID)
SELECT
  '$line1', '$line2', '$town', '$post_code', customer.id
FROM customer
WHERE <some_constraint>

于 2012-07-17T19:01:34.303 回答
1

您可以 (1)mysql_insert_id()在 php 中使用,或 (2)LAST_INSERT_ID()直接在您的 sql 中使用

代码示例1:

mysql_query("INSERT INTO customer(First_Name, Surname, Company_Name, Telephone, Alt_Telephone)
    VALUES('$fName', '$lName', '$cName', '$tel', '$altTel')") ;
$customer_id = mysql_insert_id();
mysql_query("INSERT INTO address(line_1, line2, town, postcode, customer_ID) 
    VALUES('$line1', '$line2', '$town', '$post_code', {$customer_id})") ;

代码示例2:

mysql_query("INSERT INTO customer(First_Name, Surname, Company_Name, Telephone, Alt_Telephone)
    VALUES('$fName', '$lName', '$cName', '$tel', '$altTel')") ;
mysql_query("INSERT INTO address(line_1, line2, town, postcode, customer_ID) 
    VALUES('$line1', '$line2', '$town', '$post_code', LAST_INSERT_ID())") ;
于 2012-07-17T19:00:44.973 回答