Обычно вы бы использовали триггер для обработки upsert. Например,
drop table if exists employee,employee_salary_change;
create table employee
(ID int, Employee_Salary int, Active int);
insert into employee values
(1 , 500 , 1),
(2 , 600 , 1),
(3 , 2100 , 1);
create table EMPLOYEE_SALARY_CHANGE(
ID int, Employee_Salary int, Active int);
insert into employee_salary_change values
(1 , 500 , 1),
(2 , 600 , 1),
(3 , 2100 , 1);
drop trigger if exists t;
delimiter $$
create trigger t after update on employee
for each row
begin
update employee_salary_change
set active = 0 where id = new.id;
insert into employee_salary_change values (new.id,new.employee_salary,new.active);
end $$
delimiter ;
update employee
set employee_salary = 700 where id = 1;
select * from employee;
+------+-----------------+--------+
| ID | Employee_Salary | Active |
+------+-----------------+--------+
| 1 | 700 | 1 |
| 2 | 600 | 1 |
| 3 | 2100 | 1 |
+------+-----------------+--------+
select * from employee_salary_change;
+------+-----------------+--------+
| ID | Employee_Salary | Active |
+------+-----------------+--------+
| 1 | 500 | 0 |
| 2 | 600 | 1 |
| 3 | 2100 | 1 |
| 1 | 700 | 1 |
+------+-----------------+--------+
Я предполагаю, что ваша таблица employee_salary_change упрощена для целей вопроса, поэтому я не проверял, существует ли такая же зарплата.