sql >> Base de Datos >  >> RDS >> Mysql

Encuentre todas las columnas enteras que están llegando a sus límites usando information_schema

Escribí una solución para esta tarea, pero no soy la única persona que ha hecho algo como esto.

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 -herramientas/blob/master/pk-full-ratio.sql

Esa consulta está codificada para la test esquema, por lo que debe editarlo para su propio esquema.

La respuesta corta a la pregunta "¿se va a desbordar mi clave principal?" es simplemente modificarlo a BIGINT UNSIGNED ahora. Eso seguramente durará hasta el colapso de la civilización.

En el mismo repositorio de git, tengo otro script similar para verificar todos columnas enteras, no solo claves primarias de incremento automático. Pero no es una gran preocupación para otras columnas.