заменить строку, если тот же первичный ключ

table name: mysample.
table columns: id - PK, names - pk, age.

внутри моей выборки:

id    names      age
1    Nicole       19  
2    Sam          20  
3    Mark         15 

Я использую MySQL Workbench.

Это результат после того, как я использую этот запрос:

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) 

Это загрузит файл csv в базу данных. Я изменил файл csv и внес эти изменения.

внутри изменяет файл csv:

names       age
Nicole       20  
Sam          15  
Mark         13
May          10

Чего я хочу добиться, так это того, что строки Николь, Сэм и Марк будут обновлены, поэтому у них не будет похожих имен. Вот почему я сделал имена первичными ключами. Я искал и нашел синтаксис запроса REPLACE.

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

Как я могу указать запрос REPLACE для замены строк одним и тем же первичным ключом?


person nicole101    schedule 27.03.2014    source источник
comment
Просто сделайте ID единственным первичным ключом. удалить имя из первичного ключа   -  person Madhawas    schedule 27.03.2014
comment
это просто пример. какие мои реальные данные имеют номер позиции заказа на продажу, и это будет моим первичным ключом. Я удалил столбец с auto_increment и сделал имена своим единственным первичным ключом, и это сработало, когда я попробовал его на этой примерной таблице и данных. Но когда я использовал его для своих реальных данных, я получаю код ошибки: 1366. Неверное целочисленное значение: '' для столбца 'coupon_percent' в строке 1. Теперь я не знаю, что пошло не так.   -  person nicole101    schedule 27.03.2014
comment
У меня больше нет auto_increment для моих фактических данных. вместо этого у меня есть десятичные значения. то, что я использовал, десятичное (6,2).   -  person nicole101    schedule 27.03.2014


Ответы (1)


Вы можете попробовать загрузить новые данные во временную таблицу. Затем используйте следующий запрос для обновления таблицы:

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

После этого, если вам нужно вставить новые строки с новыми значениями names, вы можете выполнить:

insert into mysample
select * from temp_table t where t.names not in (select names from mysample);
person curandero    schedule 27.03.2014