PhpMyAdmin导出不包括作为mysqldump的主键

PhpMyAdmin导出不包括作为mysqldump的主键,phpmyadmin,mysqldump,Phpmyadmin,Mysqldump,使用PhpMyAdmin导出同一表格的结构: `DROP TABLE IF EXISTS `test_apprentis`; CREATE TABLE IF NOT EXISTS `test_apprentis` ( `a_id` smallint(10) NOT NULL, `a_promo_id` smallint(11) NOT NULL, `a_cursus` smallint(10) DEFAULT NULL ) ENGINE=MyISAM AUTO_INCREMENT=3

使用PhpMyAdmin导出同一表格的结构:

`DROP TABLE IF EXISTS `test_apprentis`;
CREATE TABLE IF NOT EXISTS `test_apprentis` (
  `a_id` smallint(10) NOT NULL,
  `a_promo_id` smallint(11) NOT NULL,
  `a_cursus` smallint(10) DEFAULT NULL
) ENGINE=MyISAM AUTO_INCREMENT=3665 DEFAULT CHARSET=utf8;`

Export with mysqldump:

DROP TABLE IF EXISTS `test_apprentis`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `test_apprentis` (
  `a_id` smallint(10) NOT NULL AUTO_INCREMENT,
  `a_promo_id` smallint(11) NOT NULL,
  `a_cursus` smallint(10) DEFAULT NULL,
  PRIMARY KEY (`a_id`)
) ENGINE=MyISAM AUTO_INCREMENT=3665 DEFAULT CHARSET=utf8;
使用PhpMyAdmin时,既没有自动增量,也没有主键
为什么?

我把自己当成了新手! 我看了一下屏幕上显示的窗口内容,没有向下垂直升降杆! 通过phpMyAdmin导出在创建表后通过ALTER TABLE查询添加自动递增的列信息和主键

DROP TABLE IF EXISTS `test_apprentis`;
CREATE TABLE IF NOT EXISTS `test_apprentis` (
  `a_id` smallint(10) NOT NULL,
  `a_promo_id` smallint(11) NOT NULL,
  `a_cursus` smallint(10) DEFAULT NULL
) ENGINE=MyISAM AUTO_INCREMENT=3665 DEFAULT CHARSET=utf8;

ALTER TABLE `test_apprentis`
  ADD PRIMARY KEY (`a_id`);

ALTER TABLE `test_apprentis`
  MODIFY `a_id` smallint(10) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3665;

对于这个愚蠢的问题,请接受我的道歉。

这不是一个愚蠢的问题,phpMyAdmin过去常常在CREATE TABLE语句末尾包含键,并在它们的列名声明旁边包含键的特征。在版本4.2.0.0(2014-05-08)之后,导出文件结构发生了更改:

  • rfe#1004在SQL导出的末尾创建索引

因此,我们必须查看导出文件的末尾,以查找所有索引信息。如果要将此行为恢复为以前的工作方式,请编辑该文件

phpMyAdmin/libraries/plugins/export/ExportSql.class.php

在该文件中,需要跳过以下行开头的代码块

if (preg_match('@CONSTRAINT|KEY@', $create_query)) {
最简单的方法是将该行更改为

if (false && preg_match('@CONSTRAINT|KEY@', $create_query)) {

在使用导出和导入时,在这方面需要注意的另一件事是导入时对事务数的限制。没有任何警告表明该数量已超过且未执行超出的数量。这意味着某些表可能存在,但尚未更新其索引和/或自动增量,特别是在导入整个数据库时。
根据表的数量及其结构,所需的事务数可能是所需事务数的三倍,因此检查和调整php.ini文件中的相关参数是值得的。

对于需要解决此问题的参数,请在
mysqldump
期间使用标志
--single transaction
,因此它会将
主键
放在
创建表
下,如下所示:


mysqldump--databases mydatabase--single transaction-u user-p>/exported\u file\u name.sql

这并不愚蠢,因为它会对不同MYSQL服务器上运行的不同版本的PMA造成严重破坏。我不明白为什么会造成严重破坏?-这只是把它们移到一个“alter”语句中——结果还是一样的,不是吗?但是PMA团队会一时兴起而改变事情。@anoldermark这会导致需要表具有主键的配置出现问题。此项的副本不是32180971的副本。该问题特别询问从Wordpress导入和导出时发生的错误。答案是相关的,但问题不是,搜索此问题答案的人不太可能找到该问题。修改核心肯定不是最好的主意…除非出于某种原因,你害怕开源项目。这是他们的观点。其他人看不到我的答案是唯一可行的,这让我有点恼火。在CREATETABLE语句下面有没有键?第一个表然后键然后第二个表然后键?