Napsal jsem řešení tohoto úkolu, ale nejsem jediný, kdo něco takového udělal.
select concat('`', table_schema, '`.`', table_name, '`.`', column_name, '`') as `column`,
auto_increment as `current_int`, max_int, round((auto_increment/max_int)*100, 2) as `pct_max`
from (select table_schema, table_name, column_name, auto_increment,
pow(2, case data_type
when 'tinyint' then 7
when 'smallint' then 15
when 'mediumint' then 23
when 'int' then 31
when 'bigint' then 63
end+(column_type like '% unsigned'))-1 as max_int
from information_schema.tables t
join information_schema.columns c using (table_schema,table_name)
join information_schema.key_column_usage k using (table_schema,table_name,column_name)
where t.table_schema in ('test')
and k.constraint_name = 'PRIMARY'
and k.ordinal_position = 1
and t.auto_increment is not null
) as dt;
https://github.com/billkarwin/bk -tools/blob/master/pk-full-ratio.sql
Tento dotaz je pevně zakódován pro test
schéma, takže jej musíte upravit pro své vlastní schéma.
Krátká odpověď na otázku "přeteče můj primární klíč?" je jen změnit jej na BIGINT UNSIGNED
Nyní. To jistě vydrží až do kolapsu civilizace.
Ve stejném git repo mám další podobný skript ke kontrole všech celočíselné sloupce, nejen automatické zvýšení primárních klíčů. Ale to není tak velký problém pro ostatní sloupce.