좋아, 그래서 MySQL의를하고있는 중이 야 말할 수 INSERT
내 테이블 중 하나에 테이블이 컬럼이 item_id
설정되어 autoincrement
와 primary key
.
item_id
동일한 쿼리에서 새로 생성 된 기본 키의 값을 출력하도록 쿼리를 얻으려면 어떻게해야 합니까?
현재 ID를 검색하기 위해 두 번째 쿼리를 실행하고 있지만 이것이 잘못된 결과를 초래할 수 있다는 점을 고려하면 좋은 습관처럼 보이지 않습니다 …
이것이 가능하지 않은 경우 올바른 ID를 검색하도록하는 가장 좋은 방법은 무엇입니까?
답변
다음 LAST_INSERT_ID()
기능 을 사용해야합니다 . http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
예 :
INSERT INTO table_name (col1, col2,...) VALUES ('val1', 'val2'...);
SELECT LAST_INSERT_ID();
이것은 당신이 다시 얻을 PRIMARY KEY
것을 마지막 행의 값 이 삽입을 :
생성 된 ID는 연결별로 서버에서 유지 보수 됩니다 . 이는 함수에 의해 주어진 클라이언트에 반환 된 값이 해당 클라이언트의 AUTO_INCREMENT 열에 영향을 미치는 가장 최근의 명령문에 대해 생성 된 첫 번째 AUTO_INCREMENT 값 임을 의미 합니다.
따라서 반환 된 값 LAST_INSERT_ID()
은 사용자 당 값 이며 다른 사용자 의 서버 에서 실행될 수있는 다른 쿼리의 영향을받지 않습니다 .
답변
조심해 !! PHP 내에서이 기본 키 값을 반환하려는 경우 “LAST_INSERT_ID ()”
이 스레드에 php 태그가 없다는 것을 알고 있지만이 답변을 발견 한 사람은 표준 mysql_query 호출을 사용하여 PHP 스크립트 삽입에서 MySQL 삽입 ID를 반환하려고합니다. 작동하지 않으며 SQL 오류를 캡처하지 않으면 명확하지 않습니다.
최신 mysqli는 여러 쿼리를 지원합니다. LAST_INSERT_ID ()는 실제로 원본의 두 번째 쿼리입니다.
IMO 마지막 기본 키를 식별하기위한 별도의 SELECT는 선택적인 mysql_insert_id () 함수보다 안전하여 이전 INSERT 작업에서 생성 된 AUTO_INCREMENT ID를 반환합니다.
답변
로부터 LAST_INSERT_ID()
문서 :
생성 된 ID는 연결별로 서버에서 유지 보수 됩니다.
즉, 스크립트에 대한 두 개의 별도 요청이 동시에 있으면 서로 영향을 미치지 않습니다 (아직 LAST_INSERT_ID()
영구 연결을 사용하지 않는 한).
답변
당신이 찾고있는 것!
select LAST_INSERT_ID()
이것은 SCOPE_IDENTITY()
에서 사용되는 기능 의 가장 좋은 대안입니다 SQL Server
.
또한 쿼리에 Last_INSERT_ID()
따라 실행되는 경우에만 작동한다는 점을 명심 해야 Insert
합니다. 즉, 쿼리는 스키마에 삽입 된 ID를 반환합니다. 특정 테이블의 마지막 삽입 ID를 얻을 수 없습니다.
답변
행을 삽입하기 전에 값이 필요한 경우 :
CREATE FUNCTION `getAutoincrementalNextVal`(`TableName` VARCHAR(50))
RETURNS BIGINT
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE Value BIGINT;
SELECT
AUTO_INCREMENT INTO Value
FROM
information_schema.tables
WHERE
table_name = TableName AND
table_schema = DATABASE();
RETURN Value;
END
이것을 인서트에 사용할 수 있습니다 :
INSERT INTO
document (Code, Title, Body)
VALUES (
sha1( concat (convert ( now() , char), ' ', getAutoincrementalNextval ('document') ) ),
'Title',
'Body'
);
답변
쿼리 결과에 다음 매개 변수가 수신됩니다.
"fieldCount": 0,
"affectedRows": 1,
"insertId": 66,
"serverStatus": 2,
"warningCount": 1,
"message": "",
"protocol41": true,
"changedRows": 0
는 insertId
당신이 필요로 정확히입니다.
(NodeJS-mySql)
답변
Python에서 pymysql을 사용하는 경우 커서에서 cursor를 사용할 수 있습니다.