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リポジトリに、すべてをチェックするための別の同様のスクリプトがあります。 主キーを自動インクリメントするだけでなく、整数列。ただし、他の列についてはそれほど問題にはなりません。




    1. PostgreSQLのさまざまな補助プランノードの概要

    2. Oracle 11gで2つの日付の間の日数を取得するにはどうすればよいですか?

    3. Oracleはいつnull列値を索引付けしますか?

    4. SQL Server 2014のプロセッサの選択–パート1