假設你的表結構是這樣的:
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;
我們可以有一些樣本數據和數據結構的信息? – mauris 2010-08-05 02:31:15