MySQL如何修改字段的默认值和空值

2022-08-29 19:08:16
目录
MySQL修改字段的默认值和空值修改字段默认值修改字段值是否为空MySQL默认值NULL、空值、Empty String的区别如何选择?先说结论区别

MySQL修改字段的默认值和空值

修改字段默认值

    修改:
    ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 默认值
      删除:
      ALTER TABLE 表名 ALTER COLUMN 字段名 DROP DEFAULT

      修改字段值是否为空

        设为空:
        ALTER TABLE 表名 MODIFY 字段名 字段类型 NULL
          设为非空:
          ALTER TABLE 表名 MODIFY 字段名 字段类型 NOT NULL

          MySQL默认值NULL、空值、Empty>

          如何选择?

          工作一年左右了,发现其实工作中除了需要实现业务代码外,更多的是与数据库打交道。最近因为项目需要,我也逐渐参与进入数据库的设计,从而发现了很多之前没有过多注意的问题。

          回想这一年来,写博客的次数屈指可数,现在想重新拾起,所以打算从数据库方面入手,先总结一个比较简单但非常常用的知识点——mysql中字段默认值的问题。

          我们可以看到,默认值的设置主要分为三种:

            1.空值,空白,即什么都不填,等同于NULL(设计表结构时保存空值会自动变成NULL),当然也可以手动输入默认值。2.NULL。3.Empty String,空字符串,可以理解为0字节长度的字符串,等同于单引号''和双引号""。

            其中,空值 = NULL,Empty String = 空字符串 = '' = ""。

            那么问题来了,当设定某一个字段的默认值的时候,是设定空值、NULL还是Empty String呢?

            先说结论

            建议不要使用NULL或空值,String类型的字段可以设置默认为Empty>

            尤其是使用php做接口开发时,设置字段类型为not null可以避免产生很多问题,如果查询出null数据直接返回给Android或IOS,而移动端又没有进行处理的话,程序就会报错。所以为了避免这种情况,一定要在服务端数据库层面从根源上解决这个问题。

            因为空值 = NULL,所以谈论区别时只比较NULL和空字符''串即可。

            区别

            1、NULL是占用磁盘空间的(并不是数据本身占用空间,而是存储它是否为NULL的标记占用1个字节),而空字符串''是不占用磁盘空间的(它的长度是0字节所以不占用)。

            网上找到的相关资料显示NULL是占用磁盘空间的

            官方文档说明:NULL>

            翻译:NULL列需要行中的额外空间来记录它们的值是否为NULL。

            即:定义字段类型时,如果允许为NULL,那么就要为每条数据多分配一个字节的空间来表示字段是否为NULL。

            直接在mysql中验证即可:

            2、字段类型是varchar时可以默认为空字符串,字段类型是int时不可以默认为空字符串,可以设置为0。

            3、当字段被设置为not null时,字段就不能是NULL但可以插入空字符串,但空字符串只能插入到字符串类型的字段中,插入其他类型的字段中会报错。而NULL可插入到任何允许为NULL的字段中。

            4、SQL语句中对空字符串进行判断时可以使用=、>、<符号;但是对NULL进行判断时必须使用is null或is not null。

            5、包含NULL的字段列,如果在查询条件中使用is not null会导致索引失效,但是使用is null索引不会失效。

            6、使用count()函数进行统计时,会过滤掉NULL值,但不会过滤掉空字符串。

            以上为个人经验,希望能给大家一个参考,也希望大家多多支持易采站长站。