반응형
삽입 전 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
반응형
'programing' 카테고리의 다른 글
Docker CentOS - mariadb(종료 상태 0, 예상됨) (0) | 2023.10.12 |
---|---|
FormDefault 요소는 XSD에서 무엇을 합니까? (0) | 2023.10.12 |
window.location.pathname에 헤더 추가 (0) | 2023.10.12 |
jQuery 팝업 버블/툴팁 (0) | 2023.10.12 |
jQuery에서 ajax 요청 일괄을 하려면 어떻게 해야 합니까? (0) | 2023.10.12 |