首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySql中键不是主键时如何“在重复时插入更新”

问在MySql中键不是主键时如何“在重复时插入更新”
EN

Stack Overflow用户
提问于 2017-04-17 03:13:59
回答 1查看 1K关注 0票数 2

我知道我可以使用插入..。关于重复密钥更新,但是如果涉及到的密钥不是主键,我如何才能做到这一点?例如:

代码语言:javascript
复制
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应该是什么样的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-17 04:02:45

您只需要首先在这两列上创建一个UNIQUE索引:

代码语言:javascript
复制
ALTER TABLE `tablename` ADD UNIQUE `unique_index`(`transId`, `pltCode`);

或者更好的是,创建一个新表:

代码语言:javascript
复制
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字段。这样你就不用每次都手动设置它。 关键字主键用于将列定义为主键。可以使用用逗号分隔的多个列来定义主键。 关键字唯一意味着两行不能具有相同的索引值。

参考有关创建表的本sitepoint教程获得更多信息:

然后执行一个ON DUPLICATE KEY UPDATE,在插入时收到一个重复的键时修改其他列:

代码语言:javascript
复制
INSERT INTO tablename (
  transId, pltCode, val1, val2
) values('001','abc','val1','val2') 
ON DUPLICATE KEY UPDATE val1 = new_val1, val2 = new_val2;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43444627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档