开发过程中MySQL笔记

本文总结了MySQL在开发中的重要注意事项,包括varchar(20)存储汉字的数量依赖于版本,unsigned整型用于非负数值,浮点类型不可设置为unsigned。在SQL关联查询中,ON与WHERE子句的位置会影响查询结果,错误1093提示不能在FROM子句中更新目标表。此外,IN操作符在数据匹配比例超过一定阈值时可能不使用索引。了解这些细节有助于提升数据库性能和正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结些MySQL在开发中注意点

1、MySQL中varchar(20)能存放多少汉字?

具体存放多少汉字跟MySQL版本有关:

  • 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
  • 5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个

2、unsigned用途:

  • unsigned 为“无符号”的意思,unsigned既为非负数

  • mysql提供了五种整型: tinyint、smallint、mediumint、int和bigint。int为integer的缩写。这些类型在可表示的取值范围上是不同的。 整数列可定义为unsigned从而禁用负值;这使列的取值范围为0以上。各种类型的存储量需求也是不同的。取值范围较大的类型所需的存储量较大。

  • mysql 提供三种浮点类型: float、double和decimal。与整型不同,浮点类型不能是unsigned的,其取值范围也与整型不同,这种不同不仅在于这些类型有最大 值,而且还有最小非零值。最小值提供了相应类型精度的一种度量,这对于记录科学数据来说是非常重要的(当然,也有负的最大和最小值)。

3、SQL关联查询中条件在on后与在where后的区别

  • A B两表左关联查询,A.id =B.ref_id

a、select * from A left join B on A.id =B.ref_id and and A.is_deleted =0 where A.name = XXX and B.status=0
b、select * from A left join B on A.id =B.ref_id where A.name = XXX and B.status=0 and A.is_deleted =0
两种写法的结果不一样:
a 中A.id =B.ref_id 关联条件之后能关联的数据,但是由于在右表中不符合A.is_deleted =0 的数据就不会和左表去做关联了。(先筛选再关联)
b 会造成本来用 A.id =B.ref_id 关联条件之后能关联的数据,关联了之后再去筛选 A.is_deleted =0 (先关联再筛选)

4、MySQL报错

  • mysql中错误:1093-You can’t specify target table for update in FROM clause的解决方法
    不能对进行查询操作单额表进行update、delete操作,MySQL不支持查询同时修改,可已经查询条件再包一层作为另一张表,再做update或delete。
    

5、in是否走索引

in通常是走索引的,当in后面的数据在数据表中超过30%(上面的例子的匹配数据大约6000/16000 = 37.5%)的匹配时,会走全表扫描,即不走索引,因此in走不走索引和后面的数据有关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

benboerdong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值