gpt4 book ai didi

mysql - 即使新值等于现有主键也能够输入多个值

转载 作者:太空宇宙 更新时间:2023-11-03 10:29:47 25 4
gpt4 key购买 nike

我有一个定义如下的表:

CREATE TABLE  `mydb`.`users` (
`userID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`userName` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`createdDate` datetime NOT NULL,
`active` tinyint(1) NOT NULL,
`lastUpdatedDate` datetime NOT NULL,
PRIMARY KEY (`userID`,`userName`) USING BTREE
)

但是,当我运行这个查询时:

REPLACE INTO users SET userName ='Joe', active=1, lastUpdatedDate=now()

它插入多行用户名为 Joe 的行,即使这是一个主键。我想是因为userID和userName都是主键,只有两者匹配才是关键。但是,我无法删除 userID 上的主键,因为 mysql 会抛出错误。我希望 userName 是不同的,因此每个 userName 只有一个记录,并且我希望 replace 语句在 userName 已经存在的情况下只更新 lastUpdatedDate(如果不存在则插入它)。我怎样才能做到这一点?

最佳答案

你是正确的 userID 和 userName 一起构成了主键。您的 replace into 会自动创建 userID 值,从而创建有效的唯一键

(1,joe)
(2,joe)
....

发出这个

ALTER TABLE `mydb`.`users` ADD CONSTRAINT UNIQUE uniqueusername (`userName`);

这会在您的表上添加所需的约束。除了 (userID,userName) 作为主键之外,现在 userName 列本身只能包含唯一值。

您可以使用此查询并获得所需的行为(它会在用户名存在时更新 lastUpdatedDate 和 active,否则会插入一个新条目,其中 lastUpdatedDate 和 createdDate 设置为 now())。

INSERT INTO `users` (`userName`, `createdDate`, `active`, `lastUpdatedDate`)
VALUES ('Joe', now(), 1, now())
ON DUPLICATE KEY UPDATE `lastUpdatedDate` = now(), active = 1;

关于mysql - 即使新值等于现有主键也能够输入多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1691371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com