IT

모든 테이블에 대한 현재 AUTO_INCREMENT 값을 가져옵니다.

lottoking 2020. 3. 28. 10:46
반응형

모든 테이블에 대한 현재 AUTO_INCREMENT 값을 가져옵니다.


MySQL의 테이블에 대한 현재 AUTO_INCREMENT 값을 얻으려면 어떻게해야합니까?


이 쿼리를 사용하여 모든 테이블 데이터를 얻을 수 있습니다.

SHOW TABLE STATUS FROM `DatabaseName` WHERE `name` LIKE 'TableName' ;

이 쿼리를 사용하여이 정보를 정확하게 얻을 수 있습니다.

SELECT `AUTO_INCREMENT`
FROM  INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND   TABLE_NAME   = 'TableName';

MySQL의 LAST_INSERT_ID () 함수를 찾고 있다고 생각합니다 . 명령 행에 있으면 다음을 실행하십시오.

LAST_INSERT_ID();

SELECT 쿼리를 통해이 값을 얻을 수도 있습니다.

SELECT LAST_INSERT_ID();

쿼리에서 번호를 얻는 것이 아니라 숫자를 알고 싶다면 다음을 사용할 수 있습니다.

SHOW CREATE TABLE tablename;

하단에 auto_increment가 표시되어야합니다


mysqli 실행 가능 샘플 코드 :

<?php
    $db = new mysqli("localhost", "user", "password", "YourDatabaseName");
    if ($db->connect_errno) die ($db->connect_error);

    $table=$db->prepare("SHOW TABLE STATUS FROM YourDatabaseName");
    $table->execute();
    $sonuc = $table->get_result();
    while ($satir=$sonuc->fetch_assoc()){
        if ($satir["Name"]== "YourTableName"){
            $ai[$satir["Name"]]=$satir["Auto_increment"];
        }
    }
    $LastAutoIncrement=$ai["YourTableName"];
    echo $LastAutoIncrement;
?>  

쿼리를 수동으로 실행하면 methai 의 답변이 맞 더라도 2 개의 동시 트랜잭션 / 연결이 실제로 프로덕션에서 런타임에이 쿼리를 실행할 때 문제가 발생합니다 (예 :) .

2 개의 연결이 동시에 열린 MySQL 워크 벤치에서 수동으로 시도했습니다.

CREATE TABLE translation (
  id BIGINT PRIMARY KEY AUTO_INCREMENT
);
# Suppose we have already 20 entries, we execute 2 new inserts:

거래 1 :

21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
     WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';

insert into translation (id) values (21);

거래 2 :

21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
     WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';

insert into translation (id) values (21);

# commit transaction 1;
# commit transaction 2;

트랜잭션 1의 삽입이 정상입니다. 트랜잭션 2의 삽입에 오류가 있습니다. 오류 코드 : 1062. 'PRIMARY'키에 대한 항목 '21'이 중복되었습니다.

트랜잭션 / 연결 당 2 개의 삽입물이 다음과 같기 때문에 jvdub 의 대답 이 좋은 해결책입니다 .

거래 1 :

insert into translation (id) values (null);
21 = SELECT LAST_INSERT_ID();

거래 2 :

insert into translation (id) values (null);
22 = SELECT LAST_INSERT_ID();

# commit transaction 1;
# commit transaction 2;

그러나 삽입 직후에 last_insert_id () 를 실행해야합니다 ! 외래 키가 필요한 다른 테이블에 삽입하기 위해 해당 ID를 재사용 할 수 있습니다!

또한 다음과 같이 2 개의 쿼리를 실행할 수 없습니다.

insert into translation (id) values ((SELECT AUTO_INCREMENT FROM
    information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()
    AND TABLE_NAME='translation'));

실제로 다른 테이블에서 해당 ID를 가져 오거나 다시 사용하거나 반환하는 데 관심이 있기 때문입니다.


SQL Server에서 열이 자동 증가하면 현재 자동 증가 된 값을 확인하고 해당 열의 해당 값을 편집하려면 다음 쿼리를 사용하십시오.

-- to get current value
select ident_current('Table_Name')

-- to update current value
dbcc checkident ('[Table_Name]',reseed,"Your Value")

참고 URL : https://stackoverflow.com/questions/15821532/get-current-auto-increment-value-for-any-table

반응형