Mysql - 实用sql汇总

本文主要用来记录开发工作中各种实用的sql

指定id范围修改数据

背景

我们在生产环境中,出于安全高效的考虑,我们可能会使用yearning等sql审批平台,处于安全考虑,一般会限制每条语句的影响行数要小于200000,那么如果全表数据大于200000,则需要按id范围划分为多个sql进行处理

例如
存在表net_type,定义如下

CREATE TABLE `net_type` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `vin` varchar(17) NOT NULL DEFAULT '' COMMENT 'vin',
  `iccid` varchar(32) NOT NULL DEFAULT '' COMMENT 'iccid',
  `net_type` varchar(10) NOT NULL DEFAULT '' COMMENT '网络类型'
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_iccid` (`iccid`) COMMENT 'iccid唯一索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='sim卡网络类型';

需要修改所有记录的net_type字段,如果该字段的值为1,就将值修改为’5G’,如果该字段的值为0,就将值修改为’4G’,否则不做处理,那么对应的sql如下

UPDATE net_type  
SET net_type = CASE  
    WHEN net_type = '1' THEN '5G'  
    WHEN net_type = '0' THEN '4G'  
    ELSE net_type
END
WHERE id BETWEEN 1 AND 150001;

CASE子句的用法

CASE 子句在 SQL 中是一种条件表达式,它允许在 SQL 语句中进行条件逻辑判断。CASE 子句可以在 SELECT 语句、INSERT 语句、UPDATE 语句、DELETE 语句的 WHERE 子句

UPDATE 语句中使用 CASE

如上文的例子,值得注意的是,ELSE net_type表示如果前两个条件都不符合就不做修改

UPDATE net_type  
SET net_type = CASE  
    WHEN net_type = '1' THEN '5G'  
    WHEN net_type = '0' THEN '4G'  
    ELSE net_type
END
WHERE id BETWEEN 1 AND 150001;

SELECT 语句中使用 CASE

假设有一个名为 employees 的表,其中包含 id、name 和 salary 字段,我们可以使用 CASE 子句来根据员工的薪水范围来分类他们:

SELECT id, name, salary,  
       CASE  
           WHEN salary <= 3000 THEN 'Low'  
           WHEN salary BETWEEN 3001 AND 7000 THEN 'Medium'  
           WHEN salary > 7000 THEN 'High'  
           ELSE 'Not Specified'  
       END AS SalaryLevel  
FROM employees;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值