我知道我可以使用插入...在重复的密钥更新上,但是当涉及的密钥不是不是的主要密钥时,我该怎么办?例如:
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应该是什么样的?
首先需要在这两个列上创建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 ,因为我们不想要这个 字段为null。因此,如果用户试图使用null创建记录 值,然后mySQL会引起错误。
字段属性 auto_increment 告诉MySQL继续添加 ID字段的下一个可用号码。这样您就不必每次手动设置它。
关键字主键用于将列定义为主键。你可以 使用逗号分隔的多个列来定义主键。
关键字 unique 表示两个行不能具有相同的索引 值。
有关更多信息,请参阅表创建的此站点点教程:
,然后在插入时收到重复键时进行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;