MySQL表的字段(结构)是否具有唯一ID?

时间:2014-01-20 16:28:19

标签: php mysql structure

我不是在谈论唯一键或auto_increments,假设我有这样的结构:

mysql> describe email_notifications;
+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| email_id      | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| email_address | varchar(100)     | NO   |     |         |                |
| course_id     | int(11) unsigned | NO   | MUL | NULL    |                |
+---------------+------------------+------+-----+---------+----------------+

我正在构建(用于娱乐,练习,并希望一些实际用途)PHP中的工具,它将分析数据库中每个表的结构,然后将其与较新的表进行比较(以协助Dev - >实时更新),然后吐出一些我可以在实时数据库上运行的MySQL查询(例如ALTER TABLE...),以便加快速度。

问题 - 每个字段是否都有某种独特的ID?

如果我将email_address从varchar(100)更改为text(例如)或将名称course_id更改为cr_id,我有什么方法可以告诉它它仍然是技术上的相同的数据集?我不想运行删除和添加,而是重命名它给它一个新类型。

或者,如果没有某种MySQL ID,有更好的方法可以做到这一点,那就太好了:)

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您可以使用information_schema.columns。以下是此表中的唯一键(即使它们未定义):

TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME     
TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION

当您更改列的名称或类型时,我认为ORDINAL_POSITION不会受到影响。所以,第二个版本可能正是你要找的。

这可能会导致问题“如果我更改表的名称该怎么办?”不幸的是,information_schema表无法帮助那里。