0

我有两个表,UserData 和 Response

UserData 有字段——

ID smallint unsigned not null auto_increment, 
Name varchar(50)
Age tinyint unsigned
PRIMARY KEY(ID)

响应有字段——

ResponseID smallint auto_increment, 
field1 text,
field2 text,
yesno bit default 0,
User_ID smallint not null unique
PRIMARY KEY(ID)
FOREIGN KEY(User_ID) references UserData(ID)

我有一个表单,用户可以在其中输入姓名、年龄、field1、field2 和 yesno 的详细信息

现在来自用户计算机的数据将全部汇集到一起,但会将其插入数据库中,这样前两个字段将进入 UserData 表,其余字段将进入 Response。

在我的应用程序逻辑中,我想做这样的事情 -

为 THIS 用户插入 UserData(name,age) 获取 ID 列值作为 UID,在 UserData 中新插入的行中为 THIS 用户插入 Response(field1,field2,yesno),其中 User_ID = UID

假设 UserData 中的 ID 为 100,则对应行的 Response 中的 User_ID 将为 100。以便稍后我可以通过WHERE User_ID = UserData.ID查询检索该用户的响应

我怎么做?last_insert_id() 是这样吗?

4

1 回答 1

0

如果您在 MySQL 端处理插入,那么可以使用LAST_INSERT_ID().

如果您从客户端代码(egphp)中执行此操作,则使用其对应 mysql_insert_id()的 inmysql_*lastInsertId()inPDO

INSERT INTO UserData (Name, Age) VALUES ('Jhon Doe', 35);
INSERT INTO Response (field1, field2, yesno, User_ID) 
VALUES ('some text', 'more text', 0, LAST_INSERT_ID());

这是SQLFiddle演示

更新关于您在评论中的担忧

生成的 ID 在每个连接的基础上在服务器中维护 。这意味着函数返回给给定客户端的值是为影响该客户端的 AUTO_INCREMENT 列的最新语句生成的第一个 AUTO_INCREMENT 值。该值不受其他客户端的影响,即使它们生成自己的 AUTO_INCREMENT 值。这种行为确保每个客户端都可以检索自己的 ID,而不用担心其他客户端的活动,也不需要锁或事务。

于 2013-09-16T08:28:39.333 回答