CREATE INDEX IF NOT EXIST这种创建索引的方式在MySQL中是不支持的,只支持CREATE INDEX,连续两次运行CREATE INDEX ,第二次会报错。
那么,我遇到这么一个问题:希望在一段升级脚本中对一个表建立索引。这段脚本可能会被反复运行,下面的写法是安全的:
if(!pdo_fieldexists('goods', 'cover_content')) {
pdo_query("ALTER TABLE goods ADD `cover_content` text");
}
CREATE TABLE if not exists `express` (
`id` int(11) NOT NULL AUTO_INCREMENT,
);
但是,索引,不支持这种先判断后创建的模式,即不支持CREATE INDEX IF NOT EXIST,也没有给出明确接口判断一个索引是否存在。MySQL文档给出的解决方案太复杂了:http://dev.mysql.com/doc/refman/5.0/en/create-index.html
我想到了一个土鳖的办法:
if(!pdo_fieldexists('dummy_table', 'new_column')) {
pdo_query("ALTER TABLE dummy_table ADD `new_column` int");
create index my_index_on_goods xxxxx;
}
完美搞定!代价是搞了个不必要的列,姑且称为Guard Column吧!如果这种需求很频繁,可以专门搞一个无用的表做这个事情。
为什么MySQL不支持CREATE INDEX IF NOT EXIST呢?周一问问OceanBase是否支持这个东东。有点奇怪。