【问题标题】:How can I get the auto incrementing field name or the primary key fieldname from a mysql table?如何从 mysql 表中获取自动递增字段名称或主键字段名称?
【发布时间】:2012-06-21 01:27:03
【问题描述】:

在 PHP 中,如何获取已设置为在添加新记录时自动递增的字段的字段名称?

在大多数情况下,它与表的 PRIMARY_KEY 相同,但不一定总是如此。

所以这个问题有 2 个部分,第二个部分分为第三部分。

1-如何获取自增字段名...

2-如何获取primary_key字段名...

2.1 表使用多个字段作为主键时如何获取primary_key(s)信息...

【问题讨论】:

    标签: php mysql primary-key auto-increment


    【解决方案1】:

    如果要获取表的主键列,可以使用这段代码:

    SELECT k.COLUMN_NAME
    FROM information_schema.table_constraints t
    LEFT JOIN information_schema.key_column_usage k
    USING(constraint_name,table_schema,table_name)
    WHERE t.constraint_type='PRIMARY KEY'
        AND t.table_schema=DATABASE() 
        AND t.table_name='tbName';    -- the name of your table
    

    要获取自动递增的字段,请尝试以下操作:

    SELECT Auto_increment 
    FROM information_schema.tables 
    WHERE table_name   = 'tbName'  
      AND table_schema = DATABASE();  
    

    【讨论】:

    【解决方案2】:

    您可以使用SHOW COLUMNS FROM table 获取表信息。像这样的:

    $res = $mysqli->query('SHOW COLUMNS FROM tablename');
    
    while($row = $res->fetch_assoc()) {
      if ($row['Extra'] == 'auto_increment')
        echo 'Field with auto_increment = '.$row['Field'];
      if ($row['Key'] == 'PRI')
        echo 'Field with primary key = '.$row['Field'];
    }
    

    【讨论】:

    • 显示 Extra='auto_increment' 的表名中的列
    【解决方案3】:

    可以查询information_schema数据库:

    SELECT column_name, column_key, extra 
    FROM information_schema.columns 
    WHERE table_schema=DATABASE() AND table_name='tablename';
    
    • column_key 将由密钥类型组成,即PRIMUL 等。
    • extra 列将包含 auto_increment 用于自动增量列。

    请注意,information_schema 数据库是“全局”的,因此您必须始终传递相应的数据库(具体地或通过 DATABASE() 用于当前数据库)表,否则您最终会得到一个大的结果集。

    【讨论】:

      【解决方案4】:

      您可以使用SHOW COLUMNS 命令获取这些信息。 More info

      示例:假设您有一个名为 City 的表。查看表属性的查询是:

      mysql> SHOW COLUMNS FROM City;
      
      ...And the result:
      +------------+----------+------+-----+---------+----------------+
      | Field      | Type     | Null | Key | Default | Extra          |
      +------------+----------+------+-----+---------+----------------+
      | Id         | int(11)  | NO   | PRI | NULL    | auto_increment |
      | Name       | char(35) | NO   |     |         |                |
      | Country    | char(3)  | NO   | UNI |         |                |
      | District   | char(20) | YES  | MUL |         |                |
      | Population | int(11)  | NO   |     | 0       |                |
      +------------+----------+------+-----+---------+----------------+
      

      这是来自http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

      【讨论】:

      • 如果您实际上包含了获取 OP 要求的信息的命令,我会赞成这个答案。
      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 2013-02-03
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多