programing

삽입 전 MariaDB 트리거가 작동하지 않습니다.

yellowcard 2023. 10. 12. 22:40
반응형

삽입 전 MariaDB 트리거가 작동하지 않습니다.

cod_unico 열에 생성된 (TIMESTamp) 및 id(AUTOINCREMPENT) 데이터를 채워야 하는데, 나머지 두 열은 MariaDB에서 생성되고 변경을 원하지 않기 때문에 php로 할 수 없어 after insert trigger 업데이트를 시도했지만 다음 오류가 발생합니다. 오류:이 저장된 기능/트리거를 호출한 문에서 이미 사용하고 있으므로 저장된 기능/트리거의 테이블 'usuasio'를 업데이트할 수 없습니다.

이 코드를 삽입하기 전에 시도해 봤습니다.


    DROP TRIGGER IF EXISTS `agregar_cod_unico`;
    CREATE DEFINER=`root`@`localhost` TRIGGER `agregar_cod_unico` BEFORE INSERT ON `usuarios` 
    FOR EACH ROW BEGIN 
    SET new.cod_unico = CONCAT(DATE_FORMAT(new.created, '%y'),DATE_FORMAT(new.created, '%m'),SUBSTR(UPPER(md5(new.id)),10,4));
    END

오류는 발생하지 않지만 작동하지 않습니다. id_unico 열은 삽입 후에도 여전히 null이지만 정적 문자열로 생성된 new.를 교체하고 new.id 의 경우에도 작동합니다. 이 값은 삽입 후 생성되는 것이 아닐까요?어쨌든 cod_unico에 대한 값을 얻고 각 삽입에 삽입하려면 어떻게 해야 합니까?

마지막으로 해결합니다. 생성된 id 열은 삽입 전이기 때문에 사용할 수 없으며 대신 타임스탬프에 now()를 사용하고 자동 증가 id를 얻기 위해 약간의 선택을 할 수 있으므로 기능 코드는 다음과 같습니다.

DROP TRIGGER IF EXISTS `agregar_cod_alumno`;
CREATE DEFINER=`root`@`localhost` TRIGGER `agregar_cod_alumno` BEFORE INSERT ON `usuarios` 
FOR EACH ROW BEGIN 

DECLARE user_id int default 0; 
SELECT auto_increment into user_id 
FROM information_schema.tables 
WHERE table_name = 'usuarios' 
AND table_schema = database(); 

SET new.cod_alumno = CONCAT(DATE_FORMAT(now(), '%y'),DATE_FORMAT(now(), '%m'),SUBSTR(UPPER(md5(user_id)),10,4)); 

END

언급URL : https://stackoverflow.com/questions/55798236/before-insert-mariadb-trigger-don%c2%b4t-works

반응형