我知道我可以使用INSERT ... ON DUPLICATE KEY UPDATE,但如果所涉及的KEY 不主键,我怎么能这样做?例如:
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应该是什么样的?
答案 0 :(得分:1)
您只需首先在这两列上创建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`)
);
正在使用字段属性 NOT NULL ,因为我们不希望这样 字段为NULL。因此,如果用户尝试使用NULL创建记录 值,然后MySQL将引发错误。
字段属性 AUTO_INCREMENT 告诉MySQL继续添加 id字段的下一个可用编号。因此,您不必每次都手动设置它。
关键字 PRIMARY KEY 用于将列定义为主键。您可以 使用以逗号分隔的多个列来定义主键。
关键字 UNIQUE 表示两行不能具有相同的索引 值。
参考This sitepoint tutorial on table creation for more info:
然后在插入时收到重复键时执行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;