我的共享主机不允许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
答案 0 :(得分:1)
我多次遇到过这个问题,而modonoghue有一种有效的方法可以通过删除表并完全重新创建它们来处理它。
基本上发生的事情是您正在尝试运行INSERT语句,这些语句将值插入已存在的主键中 - 从而为您提供重复键的错误。数据库不知道如何处理具有相同键的多个条目,因为SQL逻辑基于每个行'拥有一个完全独特的主键。
您想要做的是将所有值保存到导出的sql文件中,在查询中,当您再次导入文件时,删除所有现有文件值(假设您要将其恢复到某个点并且不担心在导出日期和导入日期之间保存的数据!)并且插入所有导出的值...或者不知何故否则会避免尝试使用现有密钥添加新条目(请参阅下文)。
导入时,将从每个表中删除所有现有数据(TRUNCATE),并将所有导出的数据写回表(INSERT),但表本身不会被删除(DROP)。
您应该可以跳过上面的步骤3(TRUNCATE),而是选中复选框"而不是INSERT语句使用......" " INSERT IGNORE语句"
基本上," IGNORE"只会跳过导出数据中的重复项,并阻止您删除现有数据。如果您只想添加丢失的数据,而不删除自上次导出以来已更改/添加的数据,这是很好的。
还有一个INSERT INTO ... ON DUPLICATE KEY UPDATE ...允许你告诉查询如果有重复的密钥该怎么做。这可以防止您忽略具有相同键的两个条目,这两个条目可能不是相同的条目。但是,正确设置会更复杂。
答案 1 :(得分:0)
正如其他人所说,放弃并重新创建表格。在phpmyadmin中,选中标有&#34的复选框;添加DROP TABLE"在做出口时。然后应该在导入时解决所描述的问题。
答案 2 :(得分:0)
删除评论由导出工具生成
--
-- Indexes for dumped tables
--
--
-- Indexes for table `EWRporta_blocks`
--
并尝试执行查询,仅供参考
ALTER TABLE EWRporta_blocks
添加PRIMARY KEY(block_id
),
添加密钥title
(title
);