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

Find alle heltalskolonner, der når sine grænser ved hjælp af informationsskema

Jeg skrev en løsning til denne opgave, men jeg er næppe den eneste person, der har gjort noget som dette.

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

Denne forespørgsel er hårdkodet til test skema, så du skal redigere det til dit eget skema.

Det korte svar på spørgsmålet "kommer min primære nøgle til at flyde over?" er bare at ændre det til BIGINT UNSIGNED nu. Det vil helt sikkert vare indtil civilisationens sammenbrud.

I den samme git-repo har jeg et andet lignende script til at kontrollere alle heltalskolonner, ikke kun auto-increment primære nøgler. Men det er ikke så meget bekymrende for andre spalter.




  1. Hvordan vælger jeg efter en række starttegn?

  2. Spatial Index i MySQL - FEJL - Kan ikke hente geometriobjekt fra data, du sender til GEOMETRY-feltet

  3. 2 måder at returnere en liste over triggere i en SQL Server-database ved hjælp af T-SQL

  4. Oracle:Konverter valutabeløb i ord ved hjælp af PL/SQL