我期待着一种方法来检查当前数据库是否已经包含我要更新的指定项目,如果存在,我只想更新其中之一。
更确切地说,我有以下内容:
ID (Primary Key, AI)
serverID
channelID
channelROLE
如果我尝试再次添加具有相同serverID和channelROLE的值,我想更新channelID。
我尝试使用ON DUPLICATE KEY UPDATE
功能,但无法弄清楚它并使其能够正常工作以满足我的需求。
答案 0 :(得分:0)
如果您有ID,则可以使用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
(...);
答案 1 :(得分:0)
如果我尝试再次添加具有相同serverID和channelROLE的值,我想更新channelID。
您似乎正在寻找INSERT INTO ... ON DUPLICATE KEY UPDATE查询。
INSERT INTO my table
(id, serverID, channelID, channelROLE)
VALUES('a', 'b', 'c', 'd')
ON DUPLICATE KEY UPDATE channelID = 'c';
为此,您需要在列serverID和channelROLE上创建UNIQUE约束:
ALTER TABLE mytable
ADD UNIQUE my_bk (serverID, channelROLE);
答案 2 :(得分:0)
首先,您在表上需要一个唯一的索引/主键。大概是在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()
函数返回给定列传递的值。