【问题标题】:MySQL - DBI: How to tell if the first column is an auto increment column?MySQL - DBI:如何判断第一列是否为自增列?
【发布时间】:2019-05-31 18:58:18
【问题描述】:

是否有可能通过这些信息可靠地判断表的第一列是否为自增列?

可用信息如下:

database handle ($dbh)
database name
table name

【问题讨论】:

    标签: mysql perl auto-increment dbi dbd-mysql


    【解决方案1】:

    您可以查询table COLUMNS in the mysql information schema,使用列EXTRA

    您会假设自动递增的列是整数数据类型,不可为空且没有默认值。

    my $sql = q{SELECT 1
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE 
        TABLE_SCHEMA = ?
        AND TABLE_NAME = ?
        AND ORDINAL_POSITION = 1
        AND DATA_TYPE = 'int'
        AND COLUMN_DEFAULT IS NULL
        AND IS_NULLABLE = 'NO'
        AND EXTRA like '%auto_increment%'};
    
    my ($first_col_is_autoincrement) =         
       $dbh->selectrow_array( $sql, undef, $db_name, $table_name );
    

    也可能使用the DBI catalog functions 以独立于数据库的方式实现相同的操作。

    【讨论】:

    • 另外,请添加指向 DBI 目录函数的链接 (metacpan.org/pod/DBI#Catalog-Methods) - 这些函数允许以独立于数据库的方式执行相同操作)
    • @Corion :对...我更新了我的答案以提及这一点,尽管我不确定 DBI(和/或 DBD::mysql)是否可以访问 INFORMATION_SCHEMA.COLUMNS 中的所有相关列跨度>
    • @Corion:您知道 DBI 目录函数如何实现这一点(找出列是否为自动增量列)吗?
    • @sid_com 据我所知,没有方便的方法来获取列的auto_increment 状态。检查extra 字段为like '%auto_increment%' 是据我所知的唯一方法。
    猜你喜欢
    • 1970-01-01
    • 2014-01-25
    • 2017-08-30
    • 1970-01-01
    • 2016-07-25
    • 2019-03-24
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多