V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
pppguest3962
V2EX  ›  MySQL

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

  •  
  •   pppguest3962 · 2021-06-07 18:00:09 +08:00 · 1736 次点击
    这是一个创建于 1276 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一个 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())

    6 条回复    2021-06-08 12:00:19 +08:00
    xuanbg
        1
    xuanbg  
       2021-06-07 19:10:04 +08:00
    replace lessonschedule (`lstarttime`,`lname`,`lperiod`,`lid`,`lupdatetime`) values (...)
    xuanbg
        2
    xuanbg  
       2021-06-07 19:11:09 +08:00
    但你如果使用数据库自增 id 的话,貌似 id 会变
    xuanbg
        3
    xuanbg  
       2021-06-07 19:12:31 +08:00
    啊啊,错了,是 auto_increment 的值会变
    JasonLaw
        4
    JasonLaw  
       2021-06-07 19:27:24 +08:00 via iPhone
    mringg
        5
    mringg  
       2021-06-07 20:32:15 +08:00
    insert .... on duplicate key update .....
    id 、lid 都是唯一的,感觉表设计的就有问题🤦‍♂️
    saulshao
        6
    saulshao  
       2021-06-08 12:00:19 +08:00
    这个表设计倒是没有问题,这种问题大多数的做法都是先使用 lid 去数据库查一下判断一次。
    然后在程序中根据查询结果拼接 SQL 。
    你如果在 google 上搜索 mysql merge, 则会获得一些有趣的结果。
    你可以自己研究一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5682 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:00 · PVG 11:00 · LAX 19:00 · JFK 22:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.