Mysql 如果主键相同,则替换行

Mysql 如果主键相同,则替换行,mysql,sql,csv,replace,load-data-infile,Mysql,Sql,Csv,Replace,Load Data Infile,在mysample中: table name: mysample. table columns: id - PK, names - pk, age. 我正在使用MySQL工作台 这是使用此查询后的结果: id names age 1 Nicole 19 2 Sam 20 3 Mark 15 这将把csv文件加载到数据库中。我修改了csv文件并做了这些更改 内部修改csv文件: load data loc

在mysample中:

table name: mysample.
table columns: id - PK, names - pk, age.
我正在使用MySQL工作台

这是使用此查询后的结果:

id    names      age
1    Nicole       19  
2    Sam          20  
3    Mark         15 
这将把csv文件加载到数据库中。我修改了csv文件并做了这些更改

内部修改csv文件:

load data local infile 'C:/Users/mysample.csv' into table mysample fields terminated by ','
enclosed by '"'
lines terminated by '\n'
ignore 1 lines
(names, age) 
我想要实现的是,行Nicole、Sam和Mark将被更新,因此没有类似的名称。这就是为什么我把名字作为主键。我搜索并找到了REPLACE查询语法

names       age
Nicole       20  
Sam          15  
Mark         13
May          10
但我在数据库中得到了这些结果:

load data local infile 'C:/Users/mysample.csv' replace into table mysample fields    
terminated by ','
enclosed by '"'
lines terminated by '\n'
ignore 1 lines
(names, age)

如何指定替换查询以替换具有相同主键的行?

您可以尝试将新数据加载到临时表中。然后使用以下查询更新表:

id    names        age
1     Nicole       19
2     Sam          20
3     Mark         15
4     Nicole       20
5     Sam          15
6     Mark         13
7     May          10
之后,如果需要插入具有新值
名称
的新行,则可以执行:

update mysample a set 
age = (select t.age from temp_table t where t.names = a.names);

只需将make ID作为唯一的主键。从主键中删除名称这只是一个示例。我的真实数据有一个销售订单项目编号,这将是我的主键。我以自动递增的方式删除了该列,并使名称成为我唯一的主键,当我在这个示例表和数据上尝试它时,它起了作用。但是当我在实际数据中使用它时,我得到了错误代码:1366。第1行“优惠券百分比”列的整数值“”不正确。现在我不知道出了什么问题。我的实际数据不再有任何自动增量。相反,我有十进制值。我用的是十进制(6,2)。
insert into mysample
select * from temp_table t where t.names not in (select names from mysample);