1068在mysql中定义了多个主键

时间:2015-02-05 04:20:27

标签: mysql phpmyadmin

我导出(使用Update)我现有的My SQL备份并通过PHPAdmin将其导入另一台PC,但它给出了以下错误消息。我需要替换备份PC上的现有数据库。有可能这样做吗?

"#1068 - 定义了多个主键"

谢谢, Mohan K

3 个答案:

答案 0 :(得分:3)

是的,在导出中添加drop table选项,然后在导入时,您的表将被删除并重新创建。这样可以避免pk冲突。

答案 1 :(得分:0)

批量更换现有数据库...

一种选择是删除现有数据库并重新创建它。但是请确保你真的想要这样做,并且你在MySQL实例上这样做你真的想要这样做:

DROP DATABASE mydb ;
CREATE DATABASE mydb ; 

请注意,这可能会对授予的权限产生影响,您可能需要重新授予新数据库的权限。 (在CREATE DATABASE语句中,包括默认字符集和排序规则的规范,如果它们与实例变量的设置不同。)

SQLyog有一个方便的#34;空数据库" menu选项,它删除数据库中的所有对象,而不必删除数据库并重新创建它。 (这可能会对授予单个数据库对象的权限产生影响。)

我不确定phpmyadmin是否具有等效功能。要自己动手,需要查询information_schema表以识别所有表格,视图,程序等。

例如,要生成DROP TABLE语句的列表,您可以运行如下的查询:

 SELECT CONCAT('DROP TABLE `',t.table_schema,'`.`',t.table_name,'` ;') AS stmt
   FROM information_schema.tables t
  WHERE t.table_schema = 'foo' ;

如果表有外键,您可以为会话设置FOREIGN_KEY_CHECKS=0,或者以适当的顺序执行drop语句等。然后重复其他对象类型:information_schema.routines,等

答案 2 :(得分:0)

而不是drop database,而是将其清空:

truncate tablename

(然后再次添加pk) 当您这样做时,不必再次重新创建所有表和列。