我正在尝试使用交易在数据库中为两名员工交换两个电话号码。我不确定我是否理解SQL中的变量,因为我不断收到错误。我是否为交换引用了这些变量错误?以下是我到目前为止的情况:
use lunches;
start transaction;
set @phone1 = (select phone_number
from l_employees
where employee_id = '205');
set @phone2 = (select phone_number
from l_employees
where employee_id = '209');
update l_employees
set phone1 = @phone2, phone2 = @phone1;
我收到一个错误,即字段列表中有一个未知的列'phone1'。如何获取我创建的两个变量中的值?
提前致谢!
答案 0 :(得分:4)
不需要多个语句或变量,这可以在一个语句中完成:
update emp
set phone_number = case
when 205 then (select phone_number from emp where employee_id = 209)
when 209 then (select phone_number from emp where employee_id = 205)
end
where employee_id in (205, 209);
这对于并发更新也是安全的,因为要执行的第一个语句将锁定正在更新的两行。它是原子的,因为它只是一个声明。
答案 1 :(得分:3)
根据您的SELECT
,您的UPDATE
查询应该是:
update l_employees
set phone_number = @phone2
where employee_id = '205'
update l_employees
set phone_number = @phone1
where employee_id = '209'
您为什么要使用交易?您是否期望在操作过程中更改任一电话号码?似乎不太可能有4个查询速度非常快。