我的共享主机不允许 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文件中,在查询中,当您再次导入文件时,删除所有现有值(假设您想将其恢复到某个点)并且不用担心导出日期和导入日期之间保存的数据!)并且插入所有导出的值...或者以其他方式避免尝试使用现有密钥添加新条目(请参阅下文)。
导入时,所有现有数据将从每个表中删除(TRUNCATE),所有导出的数据将写回到表中(INSERT),但表本身不会被删除(DROP)。
您应该能够跳过上面的步骤 3 (TRUNCATE),而是选择复选框“代替 INSERT 语句使用...”“INSERT IGNORE 语句”
基本上,“忽略”只会跳过导出数据中的重复项,并防止您删除现有数据。如果您只想添加回丢失的数据,而不删除自上次导出以来更改/添加的数据,这非常有用。
还有一个 INSERT INTO ... ON DUPLICATE KEY UPDATE ... ,它允许您准确地告诉查询如果存在重复键该怎么办。这可以防止您忽略具有相同键但可能不相同的两个条目。然而,正确设置要复杂得多。
正如其他人所说,删除并重新创建表。在 phpmyadmin 中,执行导出时选中标记为“add DROP TABLE”的复选框。那么所描述的问题应该在导入时得到解决。
删除导出工具生成的评论
--
-- Indexes for dumped tables
--
--
-- Indexes for table `EWRporta_blocks`
--
并尝试仅按如下方式执行查询
更改表
EWRporta_blocks
添加主键(block_id
),
添加密钥 title
( title
) ;