从mysql中新创建的外键值创建记录

时间:2013-09-16 08:17:55

标签: mysql foreign-keys foreign-key-relationship

我有两个表,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。

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

为此用户插入UserData(名称,年龄) 将ID列值作为UID,获取UserData中新插入的行 为THIS用户插入Response(field1,field2,yesno),其中User_ID = UID

假设UserData中的ID是100,那么对应行中的User_ID将为100。 因此,稍后我可以通过WHERE User_ID = UserData.ID查询

检索该用户的响应

我该怎么做? last_insert_id()那样做?

1 个答案:

答案 0 :(得分:0)

如果您在MySQL端处理插入,则使用LAST_INSERT_ID()

如果您是通过客户端代码(例如php)执行此操作,请使用mysql_*中的mysql_insert_id()PDO中的lastInsertId()

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而无需担心   其他客户的活动,无需锁或   交易。