我不是在谈论唯一键或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,有更好的方法可以做到这一点,那就太好了:)
谢谢!
答案 0 :(得分:1)
我认为您可以使用information_schema.columns
。以下是此表中的唯一键(即使它们未定义):
TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION
当您更改列的名称或类型时,我认为ORDINAL_POSITION
不会受到影响。所以,第二个版本可能正是你要找的。 p>
这可能会导致问题“如果我更改表的名称该怎么办?”不幸的是,information_schema
表无法帮助那里。