mysql 삽입 쿼리에서 새 레코드 기본 키 ID를 가져 오시겠습니까?
좋아, 그래서 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는 이전의 INSERT 작업에서 생성 된 AUTO_INCREMENT ID를 반환하는 선택적 mysql_insert_id () 함수보다 안전합니다.
로부터 LAST_INSERT_ID()
문서 :
생성 된 ID는 연결별로 서버에서 유지 보수 됩니다.
즉, 스크립트에 대한 두 개의 별도 요청이 동시에 있으면 서로 영향을 미치지 않습니다 (아직 LAST_INSERT_ID()
영구 연결을 사용하지 않는 한).
당신이 찾고있는 것!
select LAST_INSERT_ID()
이것은 SCOPE_IDENTITY()
에서 사용되는 가장 좋은 기능입니다 SQL Server
.
또한 쿼리에 Last_INSERT_ID()
따라 실행되는 경우에만 작동한다는 점을 명심 해야 Insert
합니다. 즉, 쿼리는 스키마에 삽입 된 ID를 반환합니다. 특정 테이블의 마지막 삽입 ID를 얻을 수 없습니다.
자세한 내용 은 mySQL의 SQLServer 함수 SCOPE_IDENTITY ()와 동일합니까?
행을 삽입하기 전에 값이 필요한 경우 :
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)
If in python using pymysql, from the cursor you can use cursor.lastrowid
simply use "$last_id = mysqli_insert_id($conn);"
If you are using PHP: On a PDO object you can simple invoke the lastInsertId method after your insert.
Otherwise with a LAST_INSERT_ID you can get the value like this: SELECT LAST_INSERT_ID();
i used return $this->db->insert_id();
for Codeigniter
'IT story' 카테고리의 다른 글
서식을 손상시키지 않고 CSV 열에 쉼표를 포함시키는 방법이 있습니까? (0) | 2020.05.05 |
---|---|
MySQL 데이터베이스에 통화 값을 저장하기위한 최상의 데이터 유형 (0) | 2020.05.05 |
파이썬에서 정규식 문자열 이스케이프 (0) | 2020.05.05 |
vim에 어떤 파일 형식이로드되어 있는지 확인 (0) | 2020.05.05 |
(Deep) jQuery를 사용하여 배열 복사 (0) | 2020.05.05 |