问题:(我正在学习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
请您建议我解决此问题的正确有效方法。谢谢 !
答案 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;