请教一条 MySQL 语句,部分字段条件去做判断,判断是否更新另外的字段,无数据就 INSERT INTO...

2021-06-07 18:00:09 +08:00
 pppguest3962

有一个 lessonschedule 表,
id 字段自增长,(自增长字段似乎必须设置为 key ?)
另外还有 4 个字段:lstarttime,lname,lperiod,lid,lupdatetime

索引做了约束
UNIQUE KEY only (lid) USING BTREE,

表内已有如下数据:

INSERT INTO lessonschedule (`lstarttime`,`lname`,`lperiod`,`lid`,`lupdatetime`) 
VALUE 
('2021-7-15 14:00:00','卷腹','45min','21','2021-06-27 11:00:04');

INSERT INTO lessonschedule (`lstarttime`,`lname`,`lperiod`,`lid`,`lupdatetime`) 
VALUE 
('2021-7-16 14:00:00','徒手箭步蹲','45min','26','2021-06-27 11:00:04');

INSERT INTO lessonschedule (`lstarttime`,`lname`,`lperiod`,`lid`,`lupdatetime`) 
VALUE 
('2021-7-17 14:00:00','跪姿俯卧撑','45min','28','2021-06-27 11:00:04');

INSERT INTO lessonschedule (`lstarttime`,`lname`,`lperiod`,`lid`,`lupdatetime`) 
VALUE 
('2021-7-18 14:00:00','俯姿哑铃','45min','32','2021-06-27 11:00:04');

###################################################################################

现在有一条新数据,课程改时间了

lessonschedule (`lstarttime`,`lname`,`lperiod`,`lid`,`lupdatetime`) 
VALUE 
('2021-7-25 09:30:00','徒手箭步蹲','45','26','2021-06-27 16:40:04');

为此,请教各位实现这两个逻辑的 MySQL 语句(能用一句解决吗?)
1.如果表原本已经有lid='26'的数据,lstarttime不同的话,将原来在表的数据改为最新的 lstarttime,同时将 lupdatetime 更新为 NOW()

2.如果表没有lid='26'的数据,全部字段的数据新加入(lupdatetime使用 NOW())

1633 次点击
所在节点    MySQL
6 条回复
xuanbg
2021-06-07 19:10:04 +08:00
replace lessonschedule (`lstarttime`,`lname`,`lperiod`,`lid`,`lupdatetime`) values (...)
xuanbg
2021-06-07 19:11:09 +08:00
但你如果使用数据库自增 id 的话,貌似 id 会变
xuanbg
2021-06-07 19:12:31 +08:00
啊啊,错了,是 auto_increment 的值会变
JasonLaw
2021-06-07 19:27:24 +08:00
mringg
2021-06-07 20:32:15 +08:00
insert .... on duplicate key update .....
id 、lid 都是唯一的,感觉表设计的就有问题🤦‍♂️
saulshao
2021-06-08 12:00:19 +08:00
这个表设计倒是没有问题,这种问题大多数的做法都是先使用 lid 去数据库查一下判断一次。
然后在程序中根据查询结果拼接 SQL 。
你如果在 google 上搜索 mysql merge, 则会获得一些有趣的结果。
你可以自己研究一下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/781945

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX