【发布时间】:2015-10-16 02:21:08
【问题描述】:
我正在做一个 MySQL 不同,以帮助将我的表从开发更新到生产,但我在索引方面遇到了一点问题。
我正在使用show full columns from table 获取表的索引/键并进行比较,然后构建必要的查询来更新第一个表。
我得到了主键,这是有效的。但是我一直在阅读,我仍然没有完全理解其他两种可能性,MUL和UNI。
我阅读了手册页..
如果 Key 是 PRI,则该列是 PRIMARY KEY 或者是列之一 在多列 PRIMARY KEY 中。
如果 Key 为 UNI,则该列是唯一值索引的第一列 不能包含 NULL 值。
如果 Key 是 MUL,则允许给定值多次出现 列内。该列是非唯一索引的第一列 或可以包含 NULL 值的唯一值索引。
这就是我目前得到的,如果它在某种程度上相关的话。
if($key1 != $key2){
if($key1['PRI'] != $key2['PRI']){
// remove any existing primary keys
$results[$table_name][] = "ALTER TABLE $table_name DROP PRIMARY KEY;";
// add the new primary keys
$results[$table_name][] = "ALTER TABLE $table_name ADD CONSTRAINT pk_$table_name PRIMARY KEY (".implode(",", $key2['PRI']).")";
}
if($key1['MUL'] != $key2['MUL']){
// what to do here?
}
if($key1['UNI'] != $key2['UNI']){
// what to do here?
}
}
我猜我可以为UNI 做这样的事情:ALTER TABLE table
ADD CONSTRAINT uc_myKey UNIQUE (indexColumn) ..对吗?
MULtiple 键怎么样?它的语法是什么?
创建MUL 和UNI 类型键的MySQL 语法是什么?
谢谢。
【问题讨论】:
-
您对 UNI 的看法是正确的,因为它是这样的:
alter table blah add constraint pk_something primary key (field1, field2) -
@JorgeCampos - 谢谢,但这是我用于
PRI类型键的确切语法。它们是可互换的还是我的主键查询需要调整?