使用重复的主键创建mysql表

时间:2016-06-30 13:32:09

标签: mysql

问题:(我正在学习MySQL和PHP)我想在mac系统上创建一个带有重复主键的MySQL表。

我的CSV文件如下,超过1000行;

一个; 1;位; 4

一个; 3;位; 7

B; 1;位1

B; 2;位; 10

B; 4;但; 1

我尝试了以下命令:

create table new (  
     P VARCHAR(8) int  NOT NULL AUTO_INCREMENT primary key, 
     P VARCHAR(8), 
     Pposition VARCHAR(30), 
     Ptype VARCHAR(30)
 ) ENGINE=InnoDB;

load data local infile '/Users/admin/Desktop/ab.csv' 
   INTO TABLE new 
COLUMNS TERMINATED BY';';
  

查询正常,1行受影响,1警告(0.03秒)

     

记录:1已删除:0跳过:0警告:1

请您建议我解决此问题的正确有效方法。谢谢 !

1 个答案:

答案 0 :(得分:1)

我认为你对主键的用途感到困惑 - 你应该阅读这篇文章。

解决这个特定问题:

1)您的第一列P不能被指定为主键。您尝试导入其中的值不是唯一的。

2)你给这个字段两种类型 - varchar(8) - 这意味着长达8个字符的文本,int - 意味着整数(整数)。它是一个或另一个。根据您的示例输入,它应该是varchar。

3)为此字段赋予自动增量属性没有意义 - 这适用于整数主键字段,并告诉表自动选择下一个未使用的整数值,并在每个新行时将其放入该列被建造。您的字段是(或应该是)整数或关键字段。

4)有两列名为P.你不能这样做。列名必须是唯一的。给其中一个不同的名字。试试这个表定义:

create table new (  
 P VARCHAR(8) NOT NULL, 
 P2 int, 
 Pposition VARCHAR(30), 
 Ptype VARCHAR(30)
) ENGINE=InnoDB;

或者,如果您想自动添加唯一主键,以便在导入后唯一引用行,您可以尝试:

create table new (
 ID int not null auto_increment primary key,
 P VARCHAR(8) NOT NULL, 
 P2 int, 
 Pposition VARCHAR(30), 
 Ptype VARCHAR(30)
) ENGINE=InnoDB;