sql 批量update_为了写好SQL,我养成了这些习惯

在开发中自己SQL一直写得很随便,为了提升自己的SQL水平,我在写SQL时强迫自己做这些操作,并养成习惯。

使用EXPLAIN执行计划检查是否使用到索引

我们在写SQL的时候,可能会遇到查询缓慢,SQL索引失效的情形。如果我们的字段有使用索引,那么在查询的时候尽量要让索引用上。因此在写完SQL时,用EXPLAIN执行计划去检验一下。

EXPLAIN SELECT sn FROM xxx_xxx_verify;

至于如何使用EXPLAIN执行计划,可以看看我的这篇文章:

还不会看MySQL的EXPLAIN执行计划?这篇文章能帮到你

在做批量删除和批量更新时限制条数

你是否在给数据做批量删除和批量更新的时候瑟瑟发抖,生怕修改错数据。我们可以在批量操作时在SQL后面加上limt来限制条数,尽量小批量执行。

DELETE FROM xxx_sale_xxx_sn LIMIT 1,20;

这样做了限制再也不怕手抖了,就算误删或者误修改也容易恢复。

设计表的时候,一定要有注释

这个不用说,表字段一定要有注释,不然你自己都看不懂。特别是状态字段要写清楚有哪些状态,例如

 `expected_xxxx_ways` varchar(18) NOT NULL COMMENT '计划xxx方式:LOCAL-当地xxx;TRANSFER_HOUSEHOLDS-转籍xxx',

如果只写

 `expected_xxxx_ways` varchar(18) NOT NULL COMMENT '计划xxx方式'

这样我们就不知道,有哪些方式,每种方式分别用什么表示。

插入语句要写明插入字段的名称

我们写插入语句一定要写对应字段名称,不然就很难复查插入的数据是否正确。例如:

INSERT INTO `sys_xxx` (`ID`, `RULE_NAME`, `PREFIX`, `POSTFIX`, `SN`, `S_MONTH`, `S_YEAR`, `S_LENGTH`, `S_LOOP`, `DESCRIPTION`, `CREATED_BY`, `CREATED_DATE`, `IS_ACTIVE`, `UPDATED_BY`, `UPDATED_DATE`) VALUES ('67', 'sale_transfer', 'BXS', NULL, '0', '3', 'xxxx', '3', '1', 'xxxx', 'admin', 'xxxx', '0', NULL, NULL);

这样我能知道每个数据值对应的字段,如果这样写:

INSERT INTO `sys_xxx` VALUES ('67', 'sale_transfer', 'BXS', NULL, '0', '3', 'xxxx', '3', '1', 'xxxx', 'admin', 'xxxx', '0', NULL, NULL);

当数据插入有问题时,排查就比较麻烦了。

设计表时要有create_time,update_time

这个在实际开发中是必要的,我们需要这几个字段。业务中往往会有根据创建时间或者更新时间排序。或者在排查问题时也知道这条问题数据的生成时间,当前除了时间字段,我们还会添加create_by,update_by创建人和更新人字段。还会有删除标识字段,因为很多业务都只要求逻辑删除,所以业务中还需要有这个删除标识字段。

CREATE TABLE `xxx_sale_xxx_sn` (    `id` varchar(18) NOT NULL COMMENT '主键',    ...    `create_by` varchar(20) DEFAULT NULL COMMENT '创建者',    `create_date` datetime DEFAULT NULL COMMENT '创建时间',    `is_active` char(2) DEFAULT NULL COMMENT '删除标识',    `update_by` varchar(20) DEFAULT NULL COMMENT '更新人',    `update_date` datetime DEFAULT NULL COMMENT '更新日期',     PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='xxxx单';

建议使用字符集utf8mb4创建表

MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。

原来MySQL支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 unicode 字符是 0xffff,也就是 unicode 中的基本多文种平面(BMP)。

a3d8cdcc6c6158cd0eb4eae14405825f.png

包括 Emoji 表情(Emoji 是一种特殊的 unicode 编码,常见于 iOS 和 Android 手机上),和很多不常用的汉字,以及任何新增的 unicode 字符等等(utf8的缺点)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值