MySQL导出索引
我肯定以前有人问过,但我找不到: 我有一个CMS,正在不断发展。我已经建立了一些网站使用CMS,所以他们是一个存在的数据库数量 我想从开发数据库中提取索引,并将其应用于生产数据库。有没有一种简单的方法可以将索引提取为SQL 大致如下:MySQL导出索引,sql,mysql,export,indexing,extract,Sql,Mysql,Export,Indexing,Extract,我肯定以前有人问过,但我找不到: 我有一个CMS,正在不断发展。我已经建立了一些网站使用CMS,所以他们是一个存在的数据库数量 我想从开发数据库中提取索引,并将其应用于生产数据库。有没有一种简单的方法可以将索引提取为SQL 大致如下: create index idx1 on one (lft, rght); create index idx1 on two (alias); create index acos_idx3 on three (model, related_id); 我不经常使用
create index idx1 on one (lft, rght);
create index idx1 on two (alias);
create index acos_idx3 on three (model, related_id);
我不经常使用SQL,但我记得,备份是开放文本DDL语句。这似乎意味着每次备份的开始都将包含所有表,然后是所有索引 也许这个带有一点表循环的命令将得到您想要的:
祝你好运 您可以从信息模式数据库中提取索引,然后将它们添加到另一个数据库中,但这并不容易 为了给您提供一个示例(来自用于部署的存储过程的代码),这将添加一个唯一键(如果它不存在):
if not exists (select * from information_schema.KEY_COLUMN_USAGE
where table_schema = 'database_name'
and table_name='your_table'
and constraint_name ='key_name')
then
alter table your_table add unique key `key_name` ('column_name');
end if;
你基本上可以在信息模式中找到你需要的任何东西。我相信您可以编写代码来动态检查所有这些索引,但我不确定这对您来说是否容易
更新:
您还可以使用显示database.table中的索引,正如您可以在MaasSql的答案提供的链接中看到的那样。然后通过结果循环并添加每个索引(如果它不在数据库中)
或者您可以尝试以下方法:
if not exists (select * from information_schema.STATISTICS
where table_schema = 'database_name'
and table_name='table_name'
and index_name ='key_name')
then
...
end if;
嗯,我不得不转向其他方面,这是我所能做到的(就在塞特拉斯发布他的更新之前!)。目前的问题是,如果不存在,则创建索引是无效的,因此我需要找到另一种方法来执行此操作。可能会在周末回来
$query="SHOW TABLES";
$result = mysql_query($query);
while($row = mysql_fetch_array($result))
{
$idxQ = "SHOW INDEXES FROM {$row[0]} IN $database;";
$idxR = mysql_query($idxQ);
while($idxRow = mysql_fetch_object($idxR))
{
//basic query: CREATE INDEX indexName ON tableName (columnName);
$indexName = $idxRow->Key_name;
if($indexName=='PRIMARY') continue;
$tableName = $idxRow->Table;
$columnName = $idxRow->Column_name;
$idxCreateQ = "CREATE INDEX IF NOT EXISTS $indexName ON $tableName ($columnName);";
echo $idxCreateQ;
}
}您确定这就是您想要做的吗?索引通常是在添加数据时动态创建的。它们与表中的数据紧密相连,因此即使您可以这样做,我也看不出将索引从一个数据库复制到另一个数据库有什么用。这不是提取索引数据,而是索引定义。例如,mysqldump--no data
将导出所有语句,包括index语句,我猜。我的计算机上安装了PowerDesigner,所以我有其他方法来检索索引。@Mike:请参阅编辑的问题以显示示例输出。@pascal:是的,这会更有意义:-)@Leo:看来我误解了,抱歉@利奥-塞特拉斯的回答是你需要的吗?如果不是,你能澄清一下他们的答案不太正确吗?也许他或其他人会想出一个更合适的答案!这是我正在寻找的东西,但奇怪的是,并不是所有的索引都列出了!