사용자 테이블이 포함 된 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
'MySql' 카테고리의 다른 글
MySQLi를 찾을 수 없음 Dockerized PHP (0) | 2020.10.23 |
---|---|
MySQL : 열에 단어 목록의 단어가 포함됨 (0) | 2020.10.23 |
MySQL PHP의 하위 쿼리 (0) | 2020.10.22 |
MySQL이 비교를 위해 인덱스를 사용하지 않는 이유는 무엇입니까? (0) | 2020.10.22 |
MySQL 데이터베이스 용 "데이터 사전"을 만드는 유틸리티 (0) | 2020.10.22 |
댓글