› 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 · Jun 7, 2021 · 2540 views
    This topic created in 1956 days ago, the information mentioned may be changed or developed.

    有一个 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 replies  •  2021-06-08 12:00:19 +08:00
    xuanbg
        1
    xuanbg  
       Jun 7, 2021
    replace lessonschedule (`lstarttime`,`lname`,`lperiod`,`lid`,`lupdatetime`) values (...)
    xuanbg
        2
    xuanbg  
       Jun 7, 2021
    但你如果使用数据库自增 id 的话,貌似 id 会变
    xuanbg
        3
    xuanbg  
       Jun 7, 2021
    啊啊,错了,是 auto_increment 的值会变
    ming2050
        5
    ming2050  
       Jun 7, 2021
    insert .... on duplicate key update .....
    id 、lid 都是唯一的,感觉表设计的就有问题🤦‍♂️
    saulshao
        6
    saulshao  
       Jun 8, 2021
    这个表设计倒是没有问题,这种问题大多数的做法都是先使用 lid 去数据库查一下判断一次。
    然后在程序中根据查询结果拼接 SQL 。
    你如果在 google 上搜索 mysql merge, 则会获得一些有趣的结果。
    你可以自己研究一下。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3406 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 12:31 · PVG 20:31 · LAX 05:31 · JFK 08:31
    ♥ Do have faith in what you're doing.