假设您的表格结构类似于:
users:
user_id integer
user_name varchar(50)
user_other_data varchar(999)
primary key (user_id)
unique (user_name)
other_table:
user_value varchar(999)
user_id integer foreign key (users.user_id)
您想要的是能够在other_table 中插入一个条目,只需给出值和用户名。
您必须以原子方式执行此操作,以确保 user_id/user_name 映射不会在您下面更改。换句话说,你不能这样做:
get user_id from users based on user_name.
insert value and user_id into other_table.
因为 user_id 或 user_name 可能会在上述两个步骤之间发生变化(对于物理行,user_id 可能不会发生变化,但表肯定有可能发生变化:
user_id user_name
------- ---------
1 bob
2 george
到:
user_id user_name
------- ---------
1 george
2 bob
因此,要以原子方式执行,它必须在单个 SQL 语句中(或事务的一部分,但在这种情况下您可以避免事务):
insert into other_table (user_value, user_id)
select :value, user_id from users where user_name = :name;
对于您的具体情况(在我的原始答案之后添加),您正在查看:
insert into AvatarTable (UserID,AvatarURL)
select UserID, :localAvatarURL
from UserTable
where UserName = :localUserName;