본문 바로가기
MySql

MySQL 하나의 문 내에서 MySQL의 자동 증가 값에 액세스 할 수 있습니까?

by 베이스 공부 2020. 10. 22.
반응형

사용자 테이블이 포함 된 MySQL 데이터베이스가 있습니다. 테이블의 기본 키는 'userid'이며 자동 증가 필드로 설정됩니다.

내가하고 싶은 것은 테이블에 새 사용자를 삽입 할 때 자동 증가가 다른 필드 'default_assignment'의 'userid'필드에 생성하는 것과 동일한 값을 사용하는 것입니다.

예 :

다음과 같은 성명을 원합니다.

INSERT INTO users ('username','default_assignment') VALUES ('barry', value_of_auto_increment_field())

그래서 'Barry'라는 사용자를 만들고 'userid'는 16으로 생성되지만 (예를 들어) 'default_assignment'도 동일한 값인 16을 갖기를 원합니다.

이것을 달성하는 방법이 있습니까?

감사!

업데이트 :

답장을 보내 주셔서 감사합니다. default_assignment 필드는 중복되지 않습니다. default_assigment는 users 테이블 내의 모든 사용자를 참조 할 수 있습니다. 사용자를 만들 때 이미 다른 사용자를 default_assignment로 선택할 수있는 양식이 있지만 동일한 사용자로 설정해야하는 경우가 있으므로 제 질문입니다.

업데이트 :

좋아, 업데이트 트리거 제안을 시도했지만 여전히 작동하지 않습니다. 내가 만든 트리거는 다음과 같습니다.

CREATE TRIGGER default_assignment_self BEFORE INSERT ON `users`  
FOR EACH ROW BEGIN
SET NEW.default_assignment = NEW.userid;
END;

그러나 새 사용자를 삽입 할 때 default_assignment는 항상 0으로 설정됩니다.

사용자 ID를 수동으로 설정하면 default_assignment가 사용자 ID로 설정됩니다.

따라서 자동 할당 생성 프로세스는 트리거가 적용된 후에 명확하게 발생합니다.

 

해결 방법

 

다른 테이블을 만들 필요가 없으며 max ()는 테이블의 auto_increment 값에 따라 문제가 발생합니다.

CREATE TRIGGER trigger_name BEFORE INSERT ON tbl FOR EACH ROW
BEGIN
   DECLARE next_id INT;
   SET next_id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl');
   SET NEW.field=next_id;
END

일반적으로 다른 방법 (*)으로 사용되기 때문에 next_id 변수를 선언하지만 바로 new.field = (select ...)

(*) To auto-name an image:
SET NEW.field = CONCAT('image_', next_id, '.gif');
(*) To create a hash:
SET NEW.field = CONCAT( MD5( next_id ) , MD5( FLOOR( RAND( ) *10000000 ) ) );

 

참조 페이지 https://stackoverflow.com/questions/469009

 

 

반응형

댓글