sql >> Databáze >  >> RDS >> Mysql

Najděte všechny celočíselné sloupce, které dosahují svých limitů, pomocí information_schema

Napsal jsem řešení tohoto úkolu, ale nejsem jediný, kdo něco takového udělal.

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

Tento dotaz je pevně zakódován pro test schéma, takže jej musíte upravit pro své vlastní schéma.

Krátká odpověď na otázku "přeteče můj primární klíč?" je jen změnit jej na BIGINT UNSIGNED Nyní. To jistě vydrží až do kolapsu civilizace.

Ve stejném git repo mám další podobný skript ke kontrole všech celočíselné sloupce, nejen automatické zvýšení primárních klíčů. Ale to není tak velký problém pro ostatní sloupce.




  1. Python + MySQLdb vykoná mnoho

  2. SELECT DISTINCT ignoruje různé případy

  3. Příkaz MySQL CASE a REGEXP

  4. ADDTIME() vrátí 24hodinový čas