MySQL导出索引

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); 我不经常使用

我肯定以前有人问过,但我找不到:

我有一个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);

我不经常使用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:看来我误解了,抱歉@利奥-塞特拉斯的回答是你需要的吗?如果不是,你能澄清一下他们的答案不太正确吗?也许他或其他人会想出一个更合适的答案!这是我正在寻找的东西,但奇怪的是,并不是所有的索引都列出了!