Phpmyadmin 导出问题

标签 php mysql phpmyadmin

我的共享主机不允许 SSH 访问。我正在尝试使用 phpmyadmin 导出数据库并导入到新服务器上。我不断收到此错误,但不确定如何解决。感谢您的帮助。

Error
SQL query:
--
-- Indexes for dumped tables
--
--
-- Indexes for table `EWRporta_blocks`
--
ALTER TABLE  `EWRporta_blocks` ADD PRIMARY KEY (  `block_id` ) ,
ADD KEY  `title` (  `title` ) ;
MySQL said: Documentation
#1068 - Multiple primary key defined 

最佳答案

我已经多次遇到这个问题,而 modonoghue 有一种有效的处理方法,就是删除你的表并完全重新创建它们。

问题与通用解决方案

基本上发生的事情是您正在尝试运行 INSERT 语句,这些语句将值插入到已经存在的主键中 - 从而给您一个重复键的错误。数据库不知道如何处理具有相同键的多个条目,因为 SQL 逻辑基于每个“行”都有一个完全唯一的主键。

想要做的是将所有值保存到导出的 sql 文件中,在查询中,当您再次导入文件时,删除所有现有的值(假设您想将其恢复到某个点并且不担心在导出日期和导入日期之间保存的数据!)并插入所有导出的值...或者以其他方式避免尝试使用现有 key 添加新条目(见下文)。

导出特定数据库的一种方法(TRUNCATE):

  1. 换句话说,当您使用 PHPMYADMIN 导出 sql 文件时,单击“自定义 - 显示所有可能的选项”。
  2. 在“特定于格式的选项”下确保“结构和数据”被选中(否则您最终可能会丢弃您的表格并且没有数据来恢复它们!!!)<
  3. 在“数据创建选项”下选择“插入前截断表”——这将删除表中的所有现有数据。

导入时,所有现有数据将从每个表中删除 (TRUNCATE),所有导出的数据将写回表中 (INSERT),但表本身不会被删除 (DROP)。

忽略与截断(替代路由)

您应该能够跳过上面的第 3 步 (TRUNCATE),而是选择复选框“Instead of INSERT Statements Use ...”“INSERT IGNORE statements”

基本上,“忽略”只会跳过导出数据中的重复项,从而避免删除现有数据。如果您只想添加回丢失的数据,而不删除自上次导出以来更改/添加的数据,这很好。

super 用户(在重复 key 更新时)

还有一个 INSERT INTO ... ON DUPLICATE KEY UPDATE ... 允许您准确地告诉查询如果存在重复键该怎么做。这可以防止您忽略两个具有相同键的条目,而这些条目可能不是相同的条目。但是,正确设置更为复杂。

关于Phpmyadmin 导出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30256816/

相关文章:

javascript - 如何从controller.action获取ajax响应true/false

php - Yii - 设置 Active Record 动态表名时出错

mysql !php 登录脚本! xampp, localhost phpmyadmin 我从哪里开始

mysql - 无法加载文件或程序集“mysql.data,版本=6.9.5.0”

mysql - 从 MySQL 导入到 Excel 的 CSV 在日期末尾留下 "/"

mysql - 我如何从 phpmyadmin 同时运行选择和更新查询

php - 如何优雅地处理超过 PHP 的 `post_max_size` 的文件?

php - 无法在 Laravel 中测试 Controller ?

php - 如果密码或登录名不正确如何显示

增加存储的数据后,mysql 性能会下降。需要有关系统诊断程序的提示