• 常用Sql语句


    • 如果有就更新,没有就插入一条,先来一条简单的
    INSERT INTO table_1 ( field_1, field_2 ) VALUES (value_1, value_2) ON DUPLICATE KEY UPDATE field_target = value_target
    
    • table_1:要更新的表
    • field_1...:要更新的字段, 字段中必须含有 UNIQUE 索引的字段,因为 ON DUPLICATE KEY要依靠其工作
    • value_1...:执行Insert时要插入的值,即没有记录时执行的部分
    • field_target = value_target:当有记录存在时,将 field_target 字段值更新为 value_target,允许多个字段和值存在
    • 下面再执行一个稍复杂的,当满足 B 表某些条件时,就插入或更新 A 表中的记录
    INSERT INTO user_table ( user_id, access_token )
    SELECT ad.user_name, 'dcei32kad23-0-sdfjio' 
    FROM admin_table AS ad 
    WHERE	ad.user_name = 'petty' AND ad.user_password = '123456' 
    	ON DUPLICATE KEY UPDATE access_token = 'vbmkaslwe'
    

    上面意思是:找到 admin_table 表中名字等于petty并且密码等于123456的记录,如果有就更新 user_talbe 表中 user_id = user_name 的那条记录的 access_token,使其值更改为 'vbmkaslwe',如果没有 user_id = user_name 的记录的话,就往 user_table 中插入一条新记录,该记录的 user_id 使用 ad.user_name 作为值,该记录的 access_token 使用 'dcei32kad23-0-sdfjio' 作为值。

    • 多个表选择+条件+排序+分组
    SELECT at.object_id AS id, at.title, at.time, at.time, at.`status`, COUNT(ae.user_id) AS `count` 
    FROM table_1 AS at
    LEFT JOIN table_2 AS ae 
    ON ae.activity_id = at.object_id 
    WHERE at.deleted = FALSE  
    AND EXISTS(SELECT id FROM table_3 WHERE token = '' AND user_id = '' AND expires > TIMESTAMPDIFF(SECOND, allocate_time, now())) 
    GROUP BY at.id 
    ORDER BY at.time DESC 
    LIMIT 0, 10
    

    上面的意思是:输出 xxx 列,从 table_1和table_2,关联条件是 table_2 中多个记录的 id 值要在 table_1 中存在(table_1:table_2=1:N),选择条件是 table_1 中没删除的 并且是满足 table_3 中某条件的那些个记录。把这些个记录按 table_1 的id分组(这样table_1的就不会重复),按 table_1 的时间倒序,这些记录只输出前10个

  • 相关阅读:
    记一次 .NET 某智能服装智造系统 内存泄漏分析
    记一次 .NET 某化妆品 webapi 卡死分析
    记一次 .NET 某公交卡扣费系统 程序卡死分析
    去掉烦人的:要恢复页面吗?Chrome未正确关闭
    C#Excel转图片代码
    ArcEngine实现pagelayout中文本元素的属性对话框
    arcgis 模型版本问题最大
    Arcengine开发所遇错误解决方案(持续更新)
    ArcEngine IPageLayout 添加经纬网和公里网
    Arcengine的复制粘贴
  • 原文地址:https://www.cnblogs.com/cinlap/p/9699172.html
Copyright © 2020-2023  润新知