在sql数据库上插入或更新特定值(如果已经存在)

6yt4nkrj  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(272)

我期待着一种方法来检查当前的数据库是否已经包含了指定的项目,我想更新,如果有,我只想更新其中一个。
更确切地说,我有以下几点:

ID (Primary Key, AI)
serverID
channelID
channelROLE

如果我再次尝试添加一个具有相同serverid和channelrole的值,我想更新channelid。
我试着用 ON DUPLICATE KEY UPDATE 功能,但不能找出它,使它正常工作,为我的需要。

1aaf6o9v

1aaf6o9v1#

如果我再次尝试添加一个具有相同serverid和channelrole的值,我想更新channelid。
你好像在找一个。。。重复密钥更新查询。

INSERT INTO my table 
    (id, serverID, channelID, channelROLE)
    VALUES('a', 'b', 'c', 'd')
ON DUPLICATE KEY UPDATE channelID = 'c';

为此,您需要在serverid和channelrole列上创建唯一约束:

ALTER TABLE mytable 
    ADD UNIQUE my_bk (serverID, channelROLE);
nafvub8i

nafvub8i2#

首先,您需要表上的唯一索引/主键。想必这是开着的 id . 如果您还没有:

create index unq_table1_id on table1(id);

然后你可以做:

insert into table1 (ID, serverID, channelID, channelROLE)
    values (?, ?, ?, ?)
    on duplicate key update
        serverId = values(serverId),
        channelId = values(channelId),
        channelRole = values(channelRole);

这个 ? 是传递到查询中的参数值的占位符。这个 VALUES() 函数返回为给定列传入的值。

wnavrhmk

wnavrhmk3#

如果你有身份证,你可以用 INSERT IGNORE ```
INSERT IGNORE INTO Table1
(ID, serverID, channelID, channelROLE)
VALUES
(....);

SET @id = 1,
@serverId = 123545,
@channelId = 512580,
@channelRole = 'john';
INSERT INTO Table1
(ID, serverID, channelID, channelROLE)
VALUES
(@id, @serverId, @channelId, @channelRole)
ON DUPLICATE KEY UPDATE
serverId = @serverId,
channelId = @channelId,
channelRole = @channelRole;

或替换

REPLACE INTO table1
(ID, serverID, channelID, channelROLE)
VALUES
(...);

相关问题