mysql中null值的使用

说实话,我进论坛十年了,遇到过很多MySQL的空错误。
它不是一个空字符串,也不是0。
我必须一遍又一遍地说。
例如,如果用户没有填写电话号码,则将存储NULL;如果用户填写空白数字,则“”。
两者的查询逻辑完全不同。

有趣的是 NULL 不“等于”任何值,甚至不等于它本身。
当时我写了一个WHERE条件来检查是否为空值,并直接使用了WHERE Phone IS NULL。
结果查不到任何数据。
当时我实在想不通。
后来我了解到我必须使用 IS NULL 的严格规则。

NULL是运行过程中最烦人的。
如果对其进行任何操作,结果将为 NULL。
例如,如果您想计算拥有电话的用户数量,请使用 COUNT() WHERE Phone IS NOT NULL。
这比你想象的更复杂。
由于 IFNULL(phone,'unavailable') 会直接破坏统计信息,因此您应该首先处理 NULL。

在处理函数中,COALESCE才是真神。
我记得有一个项目需要对用户的联系信息进行排序,优先考虑手机号码,然后是固定电话,最后留下虚拟提醒。
写完这几行SQL后,客户端立即安静下来——以前很难继续使用IF嵌套进行写入。
但使用COALESCE(手机、电话、“无联系信息”),代码就简单多了。

索引时要小心。
B-Tree索引允许NULL,但效率会降低。
我有一个表,允许状态列中为NULL,但查询结果总是慢半个脉冲。
后来我把它改成NOT NULL DEFAULT 'init',性能立刻就提升了。
您应该更加关注唯一索引。
默认情况下,NULL可以存储无限数量,这欺骗了很多新手。

清理数据时,最好将无效值统一转换为NULL。
我之前处理过一堆空地址。
我直接更新订单 SET Shipping_address = NULL WHERE Shipping_address = ''。
运行SQL后,数据立即被清理。
在条件聚合中,比如计算平均分,可以使用AVG(IFNULL(score,0))来排除NULL,但要知道这样会把NULL当成0,是否可以接受就看公司了。

最可怕的是隐式转换。
测试发现NULL+1 在某些版本中确实可以算1 当数量增加时数据,对我来说崩溃了。
现在写SQL的时候,遇到NULL的时候要做出明确的判断。
不要相信MySQL自己能处理它。

我只接触过一点关于 JSON 类型的知识,但我记得在 JSON 5 .7 + 中,NULL 和 JSON 'null' 是两个不同的东西,你必须编写单独的条件。
我自己从来没有运行过这个。
我记得5 .7 版本开始有数据变化,但我建议你检查一下具体细节。

总的来说,NULL并不是一个小问题,它直接影响数据的准确性和查询效率。
正确使用函数和索引策略来避免隐式转换可以省去很多麻烦。

mysql如何理解NULL和NOT NULL

在MySQL中,NULL代表未知或没有值,NOTNULL保证字段必须有值。
1 、NULL特性:代表一个不等于空字符串或0的未知值,比较结果未知。
2 . NOTNULL 作用:强制字段具有用户名、订单号等值。
3 . 示例:创建表时定义约束并要求 NULL 值。
4 . 注意。
查询比较复杂,会影响索引性能,所以业务逻辑一定要清晰。
5 .建议:谨慎使用NULL,优先使用NOTNULL,并记录规则。
恢复。
适当使用NULL和NOTNULL可以保证数据的完整性和查询的准确性。

MySQL 中NULL和空值的区别是什么?

说白了,MySQL中的NULL其实是一种占用空间的特例。
其实很简单。
当你创建一个字段并允许它为NULL时,MySQL会为这个字段分配一定的空间,即使你实际上没有存储任何数据。
我们先来说说最重要的事情。
例如,对于INT类型的字段,即使存储NULL,MySQL也会占用4 个字节的空间。
还有一点就是NULL对于不同类型的字段占用的空间是不同的。
还有另一个基本细节。
例如,对于VARCHAR类型的字段,即使它存储NULL,MySQL也会为其预先分配最大长度的空间。

一开始我以为NULL不会占用空间,后来发现这是错误的。
等等,还有一件事,当你在查询中使用 IS NULL 或 IS NOT NULL 时,MySQL 会自动处理这些 NULL 值,但它们仍然会占用空间。

因此,如果您在设计中考虑空间效率,最好避免使用 NULL,除非确实有必要表示特殊状态。
我认为值得在数据库设计阶段就明确字段是否应该允许NULL,以避免后续的优化问题。