sql >> データベース >  >> RDS >> Mysql

MySQLテーブルステータスを表示します。自動インクリメントが正しくありません

    これは機能です。バグではありません。

    テーブル統計はキャッシュされます。キャッシュを無効にして常に最新バージョンにするには、cache-clearの期間を示すサーバー変数を0に変更する必要があります:

    SET PERSIST information_schema_stats_expiry = 0
    

    このプロパティのデフォルト値は、Mysql 8.xで86400(24時間)に変更されました

    例:

    SET PERSIST information_schema_stats_expiry = 86400
    -- 86400 is the default value of mysql 8.x  if you have never changed this you don't need to set this
    
    
    show variables like 'information_schema_stats_expiry';
    
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | information_schema_stats_expiry | 86400 |
    +---------------------------------+-------+
    
    create schema mytest;
    
    create table `test` (
        `id` int(5) not null auto_increment,
        `name` varchar(256),
        PRIMARY KEY(`id`)
    );
    
    insert into test values(null,'name1')
    insert into test values(null,'name2')
    insert into test values(null,'name3')
    
    show table status where name like 'test';
    +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
    | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation          | Checksum | Create_options | Comment |
    +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
    | test | InnoDB |      10 | Dynamic    |    3 |           5461 |       16384 |               0 |            0 |         0 |              4 | 2018-10-09 15:32:15 | 2018-10-09 15:32:16 | NULL       | utf8mb4_0900_ai_ci |     NULL |                |         |
    +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
    -- The Auto_increment field is correctly set to 4.. but is now cached.
    
    insert into test values(null,'name3');
    
    show table status where name like 'test';
    +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
    | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation          | Checksum | Create_options | Comment |
    +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
    | test | InnoDB |      10 | Dynamic    |    3 |           5461 |       16384 |               0 |            0 |         0 |              4 | 2018-10-09 15:32:15 | 2018-10-09 15:32:16 | NULL       | utf8mb4_0900_ai_ci |     NULL |                |         |
    +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
    -- The Auto_increment is still 4 (it was cached).
    
    drop schema mytest
    

    次に、構成を変更します:

    SET PERSIST information_schema_stats_expiry = 0
    

    同じテストを実行します:

    show variables like 'information_schema_stats_expiry'
    
    
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | information_schema_stats_expiry | 0     |
    +---------------------------------+-------+
    
    create schema mytest;
    create table `test` (
        `id` int(5) not null auto_increment,
        `name` varchar(256),
        PRIMARY KEY(`id`)
    );
    
    insert into test values(null,'name1');
    insert into test values(null,'name2');
    insert into test values(null,'name3');
    
    show table status where name like 'test';
    
    +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
    | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation          | Checksum | Create_options | Comment |
    +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
    | test | InnoDB |      10 | Dynamic    |    3 |           5461 |       16384 |               0 |            0 |         0 |              4 | 2018-10-09 15:32:49 | 2018-10-09 15:32:49 | NULL       | utf8mb4_0900_ai_ci |     NULL |                |         |
    +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
    --  Auto_increment is 4, but the result is not cached!
    
    insert into test values(null,'name3');
    
    
    
    show table status where name like 'test';
    
    
    +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
    | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation          | Checksum | Create_options | Comment |
    +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
    | test | InnoDB |      10 | Dynamic    |    4 |           4096 |       16384 |               0 |            0 |         0 |              5 | 2018-10-09 15:32:49 | 2018-10-09 15:32:49 | NULL       | utf8mb4_0900_ai_ci |     NULL |                |         |
    +------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
    -- The  Auto_increment field is now 5 (a correct, not cached value)
    
    drop schema mytest;
    



    1. PHP、MySQL、PDOトランザクション-tryブロック内のコードはcommit()で停止しますか?

    2. 2つのテーブルからデータを取得する方法は?

    3. Docker-compose:mysqld:ファイルを作成/書き込みできません'/ var / lib / mysql / is_writable'(エラーコード:13-アクセスが拒否されました)

    4. MicrosoftAccessでレポートヘッダーにタイトルを追加する方法