답변:
이 쿼리를 사용하여 모든 테이블 데이터를 얻을 수 있습니다.
SHOW TABLE STATUS FROM `DatabaseName` WHERE `name` LIKE 'TableName' ;
이 쿼리를 사용하여이 정보를 정확하게 얻을 수 있습니다.
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND TABLE_NAME = 'TableName';
DATABASE()
명시 적 데이터베이스 이름 대신 사용할 수도 있습니다 .
SELECT MAX(id) FROM table_name
있습니까?
MySQL의 LAST_INSERT_ID () 함수를 찾고 있다고 생각합니다 . 명령 행에 있으면 다음을 실행하십시오.
LAST_INSERT_ID();
SELECT 쿼리를 통해이 값을 얻을 수도 있습니다.
SELECT LAST_INSERT_ID();
쿼리에서 번호를 얻는 것이 아니라 숫자를 알고 싶다면 다음을 사용할 수 있습니다.
SHOW CREATE TABLE tablename;
하단에 auto_increment가 표시되어야합니다
1
.
쿼리를 수동으로 실행하면 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를 가져 오거나 다시 사용하거나 반환하는 데 관심이 있기 때문입니다.
last_insert_id()
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;
?>
주어진 스키마의 모든 테이블에 대해 AUTO_INCREMENT의 백분율 "사용률"을 확인하기위한 쿼리 ( bigint unsigned 유형의 열 제외 ) :
SELECT
c.TABLE_NAME,
c.COLUMN_TYPE,
c.MAX_VALUE,
t.AUTO_INCREMENT,
IF (c.MAX_VALUE > 0, ROUND(100 * t.AUTO_INCREMENT / c.MAX_VALUE, 2), -1) AS "Usage (%)"
FROM
(SELECT
TABLE_SCHEMA,
TABLE_NAME,
COLUMN_TYPE,
CASE
WHEN COLUMN_TYPE LIKE 'tinyint(1)' THEN 127
WHEN COLUMN_TYPE LIKE 'tinyint(1) unsigned' THEN 255
WHEN COLUMN_TYPE LIKE 'smallint(%)' THEN 32767
WHEN COLUMN_TYPE LIKE 'smallint(%) unsigned' THEN 65535
WHEN COLUMN_TYPE LIKE 'mediumint(%)' THEN 8388607
WHEN COLUMN_TYPE LIKE 'mediumint(%) unsigned' THEN 16777215
WHEN COLUMN_TYPE LIKE 'int(%)' THEN 2147483647
WHEN COLUMN_TYPE LIKE 'int(%) unsigned' THEN 4294967295
WHEN COLUMN_TYPE LIKE 'bigint(%)' THEN 9223372036854775807
WHEN COLUMN_TYPE LIKE 'bigint(%) unsigned' THEN 0
ELSE 0
END AS "MAX_VALUE"
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE EXTRA LIKE '%auto_increment%'
) c
JOIN INFORMATION_SCHEMA.TABLES t ON (t.TABLE_SCHEMA = c.TABLE_SCHEMA AND t.TABLE_NAME = c.TABLE_NAME)
WHERE
c.TABLE_SCHEMA = 'YOUR_SCHEMA'
ORDER BY
`Usage (%)` DESC;
나는 똑같은 것을 찾고 헬퍼 클래스 내부에 정적 메소드를 만들어서 끝났다 (내 경우에는 App \ Helpers \ Database라고 명명했다).
방법
/**
* Method to get the autoincrement value from a database table
*
* @access public
*
* @param string $database The database name or configuration in the .env file
* @param string $table The table name
*
* @return mixed
*/
public static function getAutoIncrementValue($database, $table)
{
$database ?? env('DB_DATABASE');
return \DB::select("
SELECT AUTO_INCREMENT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = '" . env('DB_DATABASE') . "'
AND TABLE_NAME = '" . $table . "'"
)[0]->AUTO_INCREMENT;
}
메소드를 호출하고 MySql AUTO_INCREMENT를 얻으려면 다음을 사용하십시오.
$auto_increment = \App\Helpers\Database::getAutoIncrementValue(env('DB_DATABASE'), 'your_table_name');
도움이 되길 바랍니다.