sql >> Databasteknik >  >> RDS >> Mysql

Hitta alla heltalskolumner som når sina gränser med informationsschema

Jag skrev en lösning för denna uppgift, men jag är knappast den enda som har gjort något liknande.

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

Den frågan är hårdkodad för test schema, så du måste redigera det för ditt eget schema.

Det korta svaret på frågan "kommer min primära nyckel att svämma över?" är att bara ändra det till BIGINT UNSIGNED nu. Det kommer säkerligen att hålla tills civilisationens kollaps.

I samma git-repo har jag ett annat liknande skript att kontrollera alla heltalskolumner, inte bara primärnycklar med automatisk ökning. Men det är inte lika bekymmersamt för andra kolumner.




  1. Django/MySQL-python - Anslutning med gammalt (före 4.1.1) autentiseringsprotokoll vägrades (klientalternativ 'secure_auth' aktiverat)

  2. Fel:R kan inte ansluta till MySQL

  3. Hur man förbättrar INSERT-prestandan på en mycket stor MySQL-tabell

  4. session_start kastar ett allvarligt fel