MySQL 我自己常用的语句汇总

1,更新,根据一个表更新另一个表,比如批量同步外键

  方法一:

  update 更新表 set 字段 = (select 参考数据 from 参考表 where  参考表.id = 更新表.id);

  update table_2 m  set m.column = (select column from table_1 mp where mp.id= m.id);

  方法二:

  update table_1 t1,table_2 t2 set t1.column = t2.column where t1.id = t2.pid;

2,视图,把相同字段的表合起来  

  SELECT `b`.`Id` AS `Id`,`b`.`状态` AS `状态` FROM `培训体系之部门培训` `b` UNION 
  SELECT `c`.`Id` AS `Id`, `c`.`状态` AS `状态` FROM `培训体系之安全培训` `c` UNION 
  SELECT `d`.`Id` AS `Id`, `d`.`状态` AS `状态` FROM `培训体系之理念培训` `d`;

3,触发器,更新订单表的状态时,同时根据订单号更新订单明细表的状态

  条件【触发:After;插入[ ],更新[√],删除[ ]】  

  BEGIN

    if(new.状态='新') then
      update 销售订单明细 set 状态='新' where 订单号=new.订单号 and 状态<>'删除';
    end if;

  END

4,触发器,更新一个时间戳

  条件【触发:Before;插入[ ],更新[√],删除[ ]】

  BEGIN

    if(new.仓库(箱)!=old.仓库(箱) or new.车间(箱)!=old.车间(箱) ) then
      set NEW.更新时间= set new.签到时间=DATE_FORMAT(NOW(),'%x-%m-%d %H:%i:%s');;
    end if; 

  END

5,触发器,获取刚刚添加记录的自增id

  条件【触发:After;插入[√ ],更新[],删除[ ]】

  new.id

 6,查询,分组查询,关键字用逗号隔开

  select class_id, group_concat(name) frome student group by class_id;

7,查询,查重

  SELECT 某列A,COUNT(*) FROM 表名 GROUP BY 某列A HAVING COUNT(*) > 1//查看重复数据的条数

8,去重,从口袋助理的app里导入自己的系统一些客户资料,但是客户名重复了,需要删除。  

UPDATE `销售客户资料`, 
(
    SELECT
        count(客户名称) AS c,
        客户名称,
        是否口袋导入
    FROM
        `销售客户资料`
    GROUP BY
        客户名称
    HAVING
        c > 1
) tmp

SET `销售客户资料`.状态 = '删除' 

WHERE 
     `销售客户资料`.客户名称 = tmp.客户名称 
    AND `销售客户资料`.是否口袋导入 = '' 
    AND `销售客户资料`.客户编码 != '';

 9,mysql筛选条件为限定长度的字符串

select * from a where length(user_id) = 8 ;

 10,触发器注意事项

Before与After区别:before:(insert、update)可以对new进行修改。
after不能对new进行修改。 两者都不能修改old数据。

11,查重

SELECT * FROM `销售客户资料` WHERE `销售客户资料`.`客户名称` IN 
(
select t.`客户名称` from `销售客户资料` t group by t.`客户名称` having count(*)>1
) 
ORDER BY `销售客户资料`.`客户名称` DESC LIMIT 2;

 12,binlog恢复SQL

C:UsersAdministrator>mysqlbinlog --no-defaults  --base64-output=decode-rows -v E:ackuplog.000003>mysql-bin000003.sql
原文地址:https://www.cnblogs.com/sungong1987/p/9493340.html