【发布时间】:2013-07-10 15:22:11
【问题描述】:
这是我想要做的:
名为部门的表与名为员工的表具有多对多关系。 因此,表 department_employees 有以下列:department_id、employee_id、is_active。
索引department_id,employee_id为pk。
我得到一串员工 ID,例如“12,15,18,19”。 我得到了部门 ID。
我调用了一个 Mysql 存储过程(例程),它应该:
- 将所有员工插入部门
- 如果它们存在且未激活,则激活
- 应停用所有其他员工
创建过程(在 @dep_id INT 中,在 @emp_ids 文本中)
插入 TBL_DEPARTMENT_EMPLOYEES(DEPARTMENT_ID、EMPLOYEE_ID、IS_ACTIVE) 选择@dep_id,EMPLOYEE_ID,1 来自 TBL_EMPLOYEES WHERE FIND_IN_SET(EMPLOYEE_ID,@emp_ids) 重复密钥更新 IS_ACTIVE=1;
更新 TBL_DEPARTMENT_EMPLOYEES 设置 IS_ACTIVE=0 WHERE DEPARTMENT_ID=@dep_id 而不是 FIND_IN_SET(EMPLOYEE_ID, @emp_ids);
只有第一个查询运行,我猜第二个不能因为锁定或其他原因, 我尝试了 TRANSACTION - COMMIT 技巧,没用。 我想也许这里有一位很棒的人可以提供帮助,或者 eben 让这一切都在一个查询中运行。 谢谢!
【问题讨论】:
标签: mysql insert locking on-duplicate-key