我知道我可以使用插入..。关于重复密钥更新,但是如果涉及到的密钥不是主键,我如何才能做到这一点?例如:
CREATE TABLE tablename (
id INT PRIMARY KEY,
transId VARCHAR(64),
pltCode VARCHAR(64),
val1 VARCHAR(6),
val2 VARCHAR(6)
);
INSERT INTO tablename VALUES(1,'001','abc','val1','val2');如果transId和pltCode已经存在,我想更新原始记录。否则,插入一个新的。SQL应该是什么样的呢?
发布于 2017-04-17 04:02:45
您只需要首先在这两列上创建一个UNIQUE索引:
ALTER TABLE `tablename` ADD UNIQUE `unique_index`(`transId`, `pltCode`);或者更好的是,创建一个新表:
CREATE TABLE tablename (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
transId VARCHAR(64),
pltCode VARCHAR(64),
val1 VARCHAR(6),
val2 VARCHAR(6),
PRIMARY KEY (id),
UNIQUE `unique_index`(`transId`, `pltCode`)
);字段属性非空被使用,因为我们不希望这个字段为NULL。因此,如果用户试图创建一个空值的记录,那么MySQL将引发一个错误。 字段属性AUTO_INCREMENT告诉MySQL继续并将下一个可用的编号添加到id字段。这样你就不用每次都手动设置它。 关键字主键用于将列定义为主键。可以使用用逗号分隔的多个列来定义主键。 关键字唯一意味着两行不能具有相同的索引值。
然后执行一个ON DUPLICATE KEY UPDATE,在插入时收到一个重复的键时修改其他列:
INSERT INTO tablename (
transId, pltCode, val1, val2
) values('001','abc','val1','val2')
ON DUPLICATE KEY UPDATE val1 = new_val1, val2 = new_val2;https://stackoverflow.com/questions/43444627
复制相似问题