我期待着一种方法来检查当前的数据库是否已经包含了指定的项目,我想更新,如果有,我只想更新其中一个。更确切地说,我有以下几点:
ID (Primary Key, AI) serverID channelID channelROLE
如果我再次尝试添加一个具有相同serverid和channelrole的值,我想更新channelid。我试着用 ON DUPLICATE KEY UPDATE 功能,但不能找出它,使它正常工作,为我的需要。
ON DUPLICATE KEY UPDATE
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);
nafvub8i2#
首先,您需要表上的唯一索引/主键。想必这是开着的 id . 如果您还没有:
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() 函数返回为给定列传入的值。
?
VALUES()
wnavrhmk3#
如果你有身份证,你可以用 INSERT IGNORE ```INSERT IGNORE INTO Table1(ID, serverID, channelID, channelROLE)VALUES(....);
INSERT IGNORE
或
SET @id = 1,@serverId = 123545,@channelId = 512580,@channelRole = 'john';INSERT INTO Table1(ID, serverID, channelID, channelROLE)VALUES(@id, @serverId, @channelId, @channelRole)ON DUPLICATE KEY UPDATEserverId = @serverId,channelId = @channelId,channelRole = @channelRole;
或替换
REPLACE INTO table1(ID, serverID, channelID, channelROLE)VALUES(...);
3条答案
按热度按时间1aaf6o9v1#
如果我再次尝试添加一个具有相同serverid和channelrole的值,我想更新channelid。
你好像在找一个。。。重复密钥更新查询。
为此,您需要在serverid和channelrole列上创建唯一约束:
nafvub8i2#
首先,您需要表上的唯一索引/主键。想必这是开着的
id
. 如果您还没有:然后你可以做:
这个
?
是传递到查询中的参数值的占位符。这个VALUES()
函数返回为给定列传入的值。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
(...);