Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wstawianie nowego wiersza za pomocą wyzwalacza na tej samej tabeli

Nie będziesz w stanie wstawić do tej samej tabeli z wyzwalacza . Zamieniłbym wyzwalacz na procedurę, a następnie przekierował wszystkie aktualizacje statusu za pomocą procedury:

CREATE PROCEDURE UpdateJobStatus(jobId INT, NewStatus NVARCHAR(50))
BEGIN
  UPDATE job
     SET `Status` = NewStatus 
     WHERE job_id = jobId;

  IF NewStatus = 'COMPLETED' AND jobId <=6 THEN
    INSERT INTO job(cycle_id, job_id, status) 
       SELECT cycle_id, job_id+1, 'WATING_TO_START'
       FROM job 
       WHERE job_id = jobId;
  END IF;
END;

Sql Fiddle tutaj

Chociaż procedura będzie wymagała pewnych modyfikacji kodu (tj. będziesz musiał wywołać procedurę zamiast bezpośrednio aktualizować dane), procedura ma tę zaletę, że jest bardziej oczywista - wyzwalacze wykonujące czynności automagicznie w tle mogą być nieintuicyjne.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki jest najlepszy sposób na usunięcie zduplikowanych wartości z tabeli MySQL?

  2. Tworzenie dynamicznych linków za pomocą PHP/MySQL

  3. sesja php a prędkość mysql

  4. Różnice między bazami danych SQL i NoSQL — porównanie MySQL i MongoDB

  5. Projekt schematu, kiedy użytkownicy mogą definiować pola