PhpMyAdmin导出不包括PRIMARY KEY作为mysqldump

时间:2015-02-13 18:46:22

标签: 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=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,没有AUTO_INCREMENT而不是PRIMARY KEY 为什么?

5 个答案:

答案 0 :(得分:5)

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

  • rfe#1004在SQL导出的最后创建索引

因此,我们必须查看导出文件的末尾以查找所有索引信息

答案 1 :(得分:0)

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

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;

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

答案 2 :(得分:0)

如果要将此行为还原为以前的工作方式,请编辑文件

  

成功运行/库/插件/出口/ ExportSql.class.php

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

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

最简单的方法是将该行更改为

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

对于那些需要解决方案的人,请在 --single-transaction 期间使用标志 mysqldump,这样它会将 PRIMARY KEY 放在 CREATE TABLE 下,如下所示:

mysqldump --databases mydatabase --single-transaction -u user -p > ./exported_file_name.sql