我有两个表,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()那样做?
答案 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而无需担心 其他客户的活动,无需锁或 交易。