gpt4 book ai didi

mysql - 计算 auto_increment 与其最大值的接近程度的简便方法?

转载 作者:可可西里 更新时间:2023-11-01 07:47:26 25 4
gpt4 key购买 nike

所以昨天我们有一个表,它有一个达到最大值的 smallint 的 auto_increment PK。我们不得不在紧急情况下更改表格,这绝对不是我们喜欢的方式。

是否有一种简单的方法来报告我们使用的每个 auto_increment 字段与其最大值的接近程度?我能想到的最好方法是执行 SHOW CREATE TABLE 语句,解析出自动递增列的大小,然后将其与表的 AUTO_INCREMENT 值进行比较。

另一方面,鉴于架构不会经常更改,我是否应该存储有关列最大值的信息并使用 SHOW TABLE STATUS 获取当前的 AUTO_INCREMENT?

最佳答案

我觉得你的问题很有道理。您应该能够从 information_schema 中获取每个表的当前自动增量值。我不认为各种 int 类型的最大值在 MySQL 中可用作常量,但 Roland Bouman 演示了一种在 MySQL 中生成它们的简单方法:

In SQL how do I get the maximum value for an integer?

如果您将该数据放入一个表中,那么您可以编写一个 SQL 查询来获取所有表的当前自动递增状态,这样您就可以了解离耗尽值还有多远。

这是一个让您入门的简单示例:

create temporary table max_int_values
(
int_type varchar(10) not null,
extra varchar(8) not null default '',
max_value bigint unsigned not null,
primary key (int_type,max_value),
key int_type (int_type),
key max_value (max_value)
);

insert into max_int_values(int_type,extra,max_value) values ('tinyint','',~0 >> 57);
insert into max_int_values(int_type,extra,max_value) values ('tinyint','unsigned',~0 >> 56);
insert into max_int_values(int_type,extra,max_value) values ('smallint','',~0 >> 49);
insert into max_int_values(int_type,extra,max_value) values ('smallint','unsigned',~0 >> 48);
insert into max_int_values(int_type,extra,max_value) values ('mediumint','',~0 >> 41);
insert into max_int_values(int_type,extra,max_value) values ('mediumint','unsigned',~0 >> 40);
insert into max_int_values(int_type,extra,max_value) values ('int','',~0 >> 33);
insert into max_int_values(int_type,extra,max_value) values ('int','unsigned',~0 >> 32);
insert into max_int_values(int_type,extra,max_value) values ('bigint','',~0 >> 1);
insert into max_int_values(int_type,extra,max_value) values ('bigint','unsigned',~0);

select t.table_Schema,t.table_name,c.column_name,c.column_type,
t.auto_increment,m.max_value,
round((t.auto_increment/m.max_value)*100,2) as pct_of_values_used,
m.max_value - t.auto_increment as values_left
from information_schema.tables t
inner join information_schema.columns c
on c.table_Schema = t.table_Schema and c.table_name = t.table_name
inner join max_int_values m
on m.int_type = substr(c.column_type,1,length(m.int_type))
and ((m.extra like '%unsigned') = (c.column_type like '%unsigned'))
where c.extra = 'auto_increment'
order by pct_of_values_used;

关于mysql - 计算 auto_increment 与其最大值的接近程度的简便方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com