我有一个包含国家/地区名称列表的数据集,国家/地区名称对“男性”重复一次,然后再次为“女性”重复。
例如:
c_name gender
China M
Greece M
Algeria M
China F
Greece F
Algeria F
当我从csv文件创建表并导入数据时,出现“重复键”错误。我想知道这是否与发动机设置有关?有什么想法可以解决这个问题吗? (我知道它有效,因为我的朋友让它在她的Mac上工作,她在创建她的桌子时没有选择'Collate'或'Engine',但我在Windows上)
编辑:这是我创建表格的方式: CREATE TABLE dbs
。enrollment
(
e_id
INT NOT NULL,
c_name
VARCHAR(45)NOT NULL,
gender
VARCHAR(45)NULL,
2001
INT NULL,
2002
INT NULL,
2003
INT NULL,
2004
INT NULL,
2005
INT NULL,
2006
INT NULL,
2007
INT NULL,
2008
INT NULL,
2009
INT NULL,
2010
INT NULL,
PRIMARY KEY(e_id
,c_name
));
答案 0 :(得分:0)
您的朋友可能会在此表中设置一个带有c_name的主键,如果您想进行更改,则可以取消主键。
答案 1 :(得分:0)
如果您共享用于上述内容的查询,最好回答。我同意Walker Li。
如果你的查询是这样的......
CREATE TABLE enrollment (
c_name VARCHAR(255) NOT NULL,
gender VARCHAR(255) NOT NULL,
PRIMARY KEY (c_name)
);
您可以通过删除主ID行
来更改它CREATE TABLE enrollment (
c_name VARCHAR(255) NOT NULL,
gender VARCHAR(255) NOT NULL
);
希望这能解决你的问题。
如果您的csv数据包含任何唯一列作为ID,则可以将其用作主键,
CREATE TABLE enrollment (
e_id INT NOT NULL,
gender VARCHAR(255) NOT NULL,
PRIMARY KEY (e_id)
);
一个表只能有一个主键。删除最后一行中的c_name,并且只有e_id,如下所示
PRIMARY KEY (e_id);
答案 2 :(得分:0)
e_id和c_name的组合必须是唯一的。如果不是,您可以创建一个额外的人工主键作为解决方法。
CREATE TABLE `enrollment` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`e_id` int(11) NOT NULL,
`c_name` varchar(45) NOT NULL,
`gender` varchar(45) DEFAULT NULL,
`2001` int(11) DEFAULT NULL,
`2002` int(11) DEFAULT NULL,
`2003` int(11) DEFAULT NULL,
`2004` int(11) DEFAULT NULL,
`2005` int(11) DEFAULT NULL,
`2006` int(11) DEFAULT NULL,
`2007` int(11) DEFAULT NULL,
`2008` int(11) DEFAULT NULL,
`2009` int(11) DEFAULT NULL,
`2010` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;