Mysql
 sql >> Database >  >> RDS >> Mysql

Trova tutte le colonne intere che stanno raggiungendo i suoi limiti usando information_schema

Ho scritto una soluzione per questo compito, ma non sono certo l'unica persona ad aver fatto una cosa del genere.

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

Quella query è codificata per il test schema, quindi devi modificarlo per il tuo schema.

La risposta breve alla domanda "la mia chiave primaria sta per traboccare?" è semplicemente modificarlo in BIGINT UNSIGNED adesso. Ciò durerà sicuramente fino al crollo della civiltà.

Nello stesso repository git, ho un altro script simile per controllare tutto colonne intere, non solo chiavi primarie con incremento automatico. Ma non è tanto un problema per le altre colonne.