Mysql
 sql >> база данни >  >> RDS >> Mysql

Намерете всички колони с цели числа, които достигат своите граници, като използвате information_schema

Написах решение за тази задача, но едва ли съм единственият човек, който е правил нещо подобно.

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

Тази заявка е твърдо кодирана за test схема, така че трябва да я редактирате за своя собствена схема.

Краткият отговор на въпроса „ще препълва ли основният ми ключ?“ е просто да го промените на BIGINT UNSIGNED сега. Това със сигурност ще продължи до рухването на цивилизацията.

В същото git repo имам друг подобен скрипт за проверка на всички целочислени колони, а не само първични ключове с автоматично увеличение. Но това не е толкова важно за други колони.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. C++ програма, комуникираща с MySQL база данни

  2. Инсталирайте MySQL с ansible на ubuntu

  3. Обработете utf-8 данни от MySQL в C++ и върнете резултата

  4. InnoDB:намерени дублиращи се индекси - това много ли е лошо?

  5. MySQL VarChar 255 и по-нова версия