met*_*hai 524
您可以使用以下查询获取所有表数据:
SHOW TABLE STATUS FROM `DatabaseName` WHERE `name` LIKE 'TableName' ;
Run Code Online (Sandbox Code Playgroud)
您可以使用此查询获得完全相关的信息:
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND TABLE_NAME = 'TableName';
Run Code Online (Sandbox Code Playgroud)
jvd*_*dub 18
我相信你正在寻找MySQL的LAST_INSERT_ID()函数.如果在命令行中,只需运行以下命令:
LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)
您还可以通过SELECT查询获取此值:
SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)
小智 15
如果您只想知道数字,而不是在查询中获取它,那么您可以使用:
SHOW CREATE TABLE tablename;
Run Code Online (Sandbox Code Playgroud)
您应该在底部看到auto_increment
小智 5
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;
?>
Run Code Online (Sandbox Code Playgroud)
如果您手动运行查询,即使methai的答案是正确的,但是当两个并发事务/连接在生产环境中的运行时实际执行此查询时(例如),仍会出现问题。
刚刚在MySQL工作台中手动尝试过,同时打开了2个连接:
CREATE TABLE translation (
id BIGINT PRIMARY KEY AUTO_INCREMENT
);
# Suppose we have already 20 entries, we execute 2 new inserts:
Run Code Online (Sandbox Code Playgroud)
交易1:
21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';
insert into translation (id) values (21);
Run Code Online (Sandbox Code Playgroud)
交易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;
Run Code Online (Sandbox Code Playgroud)
事务1的插入是可以的:事务2的插入出错:错误代码:1062。键“ PRIMARY”的条目“ 21”重复。
一个很好的解决方案是jvdub的答案,因为对于每个事务/连接,2个插入将是:
交易1:
insert into translation (id) values (null);
21 = SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)
交易2:
insert into translation (id) values (null);
22 = SELECT LAST_INSERT_ID();
# commit transaction 1;
# commit transaction 2;
Run Code Online (Sandbox Code Playgroud)
但是我们必须在插入之后执行last_insert_id()!而且,我们可以重复使用该ID并将其插入到需要外键的其他表中!
此外,我们无法执行以下两个查询:
insert into translation (id) values ((SELECT AUTO_INCREMENT FROM
information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()
AND TABLE_NAME='translation'));
Run Code Online (Sandbox Code Playgroud)
因为我们实际上有兴趣在其他表中获取/重用该ID或返回它!
查询以检查给定模式的所有表的 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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
264324 次 |
| 最近记录: |