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