PhpMyAdmin导出不包括PRIMARY KEY作为mysqldump

rpppsulh  于 2023-08-05  发布在  PHP
关注(0)|答案(6)|浏览(147)

使用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。

5t7ly7z5

5t7ly7z51#

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

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

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

nkhmeac6

nkhmeac62#

对于那些需要解决这个问题的人,在mysqldump期间使用标志--single-transaction,因此它会将PRIMARY KEY放在CREATE TABLE下,如下所示:
mysqldump --databases mydatabase --single-transaction -u user -p > ./exported_file_name.sql

blpfk2vs

blpfk2vs3#

我把自己当成了新手!我看了一下窗口显示的内容,在屏幕上,不用向下垂直升降吧!Export by phpMyAdmin在创建表后添加自动递增的列信息和PRIMARY KEY by 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;

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

z18hc3ub

z18hc3ub4#

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

a7qyws3x

a7qyws3x5#

如果要将此行为恢复为以前的工作方式,请编辑该文件
phpMyAdmin/libraries/plugins/export/ExportSql.class.php
在文件中,需要跳过以下面一行开始的代码块

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

字符串
最简单的方法就是把这一行改成

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

csga3l58

csga3l586#

我设法使用自定义导出方法添加密钥。
custom export method
您必须在“格式特定选项”部分中选中“导出元数据”选项。
format specific options

相关问题