sql >> Database >  >> RDS >> Mysql

Vind alle integer-kolommen die hun limieten bereiken met information_schema

Ik heb een oplossing voor deze taak geschreven, maar ik ben niet de enige die zoiets heeft gedaan.

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

Die zoekopdracht is hard gecodeerd voor de test schema, dus je moet het voor je eigen schema bewerken.

Het korte antwoord op de vraag "gaat mijn primaire sleutel overlopen?" is om het gewoon te veranderen in BIGINT UNSIGNED nu. Dat zal zeker duren tot de ineenstorting van de beschaving.

In dezelfde git repo heb ik een ander soortgelijk script om alles te controleren integer-kolommen, niet alleen auto-increment primaire sleutels. Maar voor andere columns is dat niet zo belangrijk.




  1. Hoe te vinden wanneer de MySQL/MariaDB-server is gestart?

  2. PostgreSQL installeren op Ubuntu voor Ruby on Rails

  3. Basisprincipes van SQL Server ALTER TABLE-instructie

  4. mysql utf8mb4_unicode_ci veroorzaakt unieke sleutelbotsing