MySQL更新表中的当前记录

时间:2017-04-06 11:12:06

标签: mysql sql-update

我一直试图想出一个优雅的方法来做以下事情,让我们说我有下表:

+-----+---------+------------+--------------+------------+------------+--------+
| ID  | EmpNum  |    Name    |    Title     | StartDate  | UpdateDate | IsCurr |
+-----+---------+------------+--------------+------------+------------+--------+
|   1 | 0000001 | John Smith | Engineer     | 01/01/2017 | 01/02/2017 | N      |
|   2 | 0000001 | John Smith | Sr. Engineer | 01/01/2017 | NULL       | Y      |
+-----+---------+------------+--------------+------------+------------+--------+

当员工的职位发生变化时,我想更新当前员工记录的UpdateDate并将IsCurr更改为N,然后插入新记录,这将是当前一。例如,如果员工John Smith在2017年3月1日晋升为Team Lead,那么结果表就是这样。

+ ----- + --------- + ------------ + -------------- + - ---------- + ------------ + ----

----+
| ID  | EmpNum  |    Name    |    Title     | StartDate  | UpdateDate | IsCurr |
+-----+---------+------------+--------------+------------+------------+--------+
|   1 | 0000001 | John Smith | Engineer     | 01/01/2017 | 01/02/2017 | N      |
|   2 | 0000001 | John Smith | Sr. Engineer | 01/01/2017 | 01/03/2017 | N      |
|   3 | 0000001 | John Smith | Team Lead    | 01/01/2017 | NULL       | Y      |
+-----+---------+------------+--------------+------------+------------+--------+

据我所知,MySQL没有MERGE函数所以我需要在2个单独的命令中使用它。与UPDATE中的最新记录一样,然后插入新行。 在MySQL中有更好的方法吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用INSERT INTO ... ON DUPLICATE KEY排列所需的查询。但是你需要ID作为索引。 它从MySQL 5.5版开始提供。

INSERT INTO table (ID, EmpNum, Name, Title, StartDate, UpdateDate, IsCurr) 
VALUES
(3, '0000001', 'John Smith', 'Team Lead', '01/01/2017', NULL, 'Y'),
(2, '0000001', 'John Smith', 'Sr. Engineer', '01/01/2017', '01/03/2017', 'N')
ON DUPLICATE KEY UPDATE isCurr='N', UpdateDate='01/03/2017';