sql—插入mysql表或更新(如果存在)

hujrc8aj  于 2021-07-24  发布在  Java
关注(0)|答案(11)|浏览(333)

我想向数据库表中添加一行,但如果存在具有相同唯一键的行,我想更新该行。
例如:

INSERT INTO table_name (ID, NAME, AGE) VALUES(1, "A", 19);

假设唯一键是 ID ,在我的数据库中,有一行 ID = 1 . 在这种情况下,我想用这些值更新该行。通常这会产生一个错误。
如果我使用 INSERT IGNORE 它将忽略错误,但仍不会更新。

fzwojiic

fzwojiic1#

使用 INSERT ... ON DUPLICATE KEY UPDATE 查询:

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE    
name="A", age=19
1cklez4t

1cklez4t2#

checkout 替换
http://dev.mysql.com/doc/refman/5.0/en/replace.html

REPLACE into table (id, name, age) values(1, "A", 19)
wfauudbj

wfauudbj3#

使用批插入时,请使用以下语法:

INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22)
ON DUPLICATE KEY UPDATE
    name = VALUES (name),
    ...
bxpogfeg

bxpogfeg4#

这些解决方案中的任何一个都适用于您的问题:

INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19);

INSERT INTO TABLE (id, name, age) VALUES(1, "A", 19) 
    ON DUPLICATE KEY UPDATE NAME = "A", AGE = 19;

REPLACE INTO table (id, name, age) VALUES(1, "A", 19);

如果您想了解有关这些声明的详细信息,请访问此链接

vatpfxk5

vatpfxk55#

试试这个:

INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;

希望这有帮助。

r55awzrz

r55awzrz6#

试试这个: INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21' 注:
这里如果id是主键,那么在第一次插入之后 id='1' 每次尝试插入 id='1' 将更新姓名和年龄,以前的姓名年龄将更改。

yqyhoc1h

yqyhoc1h7#

使用sqlite时:

REPLACE into table (id, name, age) values(1, "A", 19)

前提是 id 是主键。或者它只是插入另一行。请参见插入(sqlite)。

jckbn6z7

jckbn6z78#

就因为我在这里寻找这个解决方案,但要从另一个相同结构的表(在我的例子中是从test db到live db)进行更新:

INSERT  live-db.table1
SELECT  *
FROM    test-db.table1 t
ON DUPLICATE KEY UPDATE
        ColToUpdate1 = t.ColToUpdate1,
        ColToUpdate2 = t.ColToUpdate2,
        ...

如前所述,只有要更新的列才需要包含在后面 ON DUPLICATE KEY UPDATE .
不需要列出 INSERT 或者 SELECT ,虽然我同意这可能是更好的做法。

2guxujil

2guxujil9#

万一你想 non-primary 作为标准/条件的字段 ON DUPLICATE ,你可以做一个 UNIQUE INDEX 键触发 DUPLICATE .

ALTER TABLE `table` ADD UNIQUE `unique_index`(`name`);

如果您希望合并两个字段以使其在表中唯一,可以通过在最后一个参数上添加更多字段来实现这一点。

ALTER TABLE `table` ADD UNIQUE `unique_index`(`name`, `age`);

注意,请确保首先删除所有具有相同属性的数据 name 以及 age 其他行中的值。

DELETE table FROM table AS a, table AS b WHERE a.id < b.id 
AND a.name <=> b.name AND a.age <=> b.age;

在那之后,它应该会触发 ON DUPLICATE 事件。

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE    
name = VALUES(name), age = VALUES(age)
nlejzf6q

nlejzf6q10#

在我的例子中,我创建了以下查询,但在第一个查询中,如果 id 如果创建第一个查询时没有 age 比…的价值 age 不会有

REPLACE into table SET `id` = 1, `name` = 'A', `age` = 19

为了避免上述问题,创建如下查询

INSERT INTO table SET `id` = '1', `name` = 'A', `age` = 19 ON DUPLICATE KEY UPDATE `id` = "1", `name` = "A",`age` = 19

愿它能帮助你。。。

jckbn6z7

jckbn6z711#

在这种情况下,您希望保留旧字段(例如:name)。查询将是:

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE    
name=name, age=19;

相关问题