MySQL如何修改字段的默认值和空值
作者:深拥浅沫 发布时间:2024-01-16 16:57:22
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 String的区别
如何选择?
工作一年左右了,发现其实工作中除了需要实现业务代码外,更多的是与数据库打交道。最近因为项目需要,我也逐渐参与进入数据库的设计,从而发现了很多之前没有过多注意的问题。
回想这一年来,写博客的次数屈指可数,现在想重新拾起,所以打算从数据库方面入手,先总结一个比较简单但非常常用的知识点——mysql中字段默认值的问题。
我们可以看到,默认值的设置主要分为三种:
1.空值,空白,即什么都不填,等同于NULL(设计表结构时保存空值会自动变成NULL),当然也可以手动输入默认值。
2.NULL。
3.Empty String,空字符串,可以理解为0字节长度的字符串,等同于单引号''和双引号""。
其中,空值 = NULL,Empty String = 空字符串 = '' = ""。
那么问题来了,当设定某一个字段的默认值的时候,是设定空值、NULL还是Empty String呢?
先说结论
建议不要使用NULL或空值,String类型的字段可以设置默认为Empty String(即空字符串''),Int类型的字段可以设置默认为0。
尤其是使用php做接口开发时,设置字段类型为not null可以避免产生很多问题,如果查询出null数据直接返回给Android或IOS,而移动端又没有进行处理的话,程序就会报错。所以为了避免这种情况,一定要在服务端数据库层面从根源上解决这个问题。
因为空值 = NULL,所以谈论区别时只比较NULL和空字符''串即可。
区别
1、NULL是占用磁盘空间的(并不是数据本身占用空间,而是存储它是否为NULL的标记占用1个字节),而空字符串''是不占用磁盘空间的(它的长度是0字节所以不占用)。
网上找到的相关资料显示NULL是占用磁盘空间的
官方文档说明:NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.
翻译: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值,但不会过滤掉空字符串。
来源:https://blog.csdn.net/qq_52000150/article/details/116000462


猜你喜欢
- QueueTornado的tornado.queue模块为基于协程的应用程序实现了一个异步生产者/消费者模式的队列。这与python标准库为
- 海量数据库的查询优化及分页算法方案 原出处不详 摘自:www.21php.com 随着“ * ”建设的逐步深入和 * 信息化的高
- 目录介绍Python连接MySQL实现数据储存总结介绍MySQL是一个关系型数据库,MySQL由于性能高、成本低、可靠性好,已经成为最流行的
- 本文回答了如下问题:“MySQL服务器有多稳定?”,以及“在本项目中我能依靠My
- 前言在Vue3响应式对象是如何实现的(1)中,我们已经从功能上实现了一个响应式对象。如果仅仅满足于功能实现,我们就可以止步于此了。但在上篇中
- 在写python程序时,对于可变对象和不可变对象这里理解不深,导致总会犯一些细节错误。以下面的程序举例:ab = {'a':
- 在之前得文章中我们说过,如果使用delete对数据库中得表进行删除,那么只是把记录删除掉,并且id的值还会保持上次的状态。即删除之前如果有四
- 因为javascript的事件模型有三种,它们分别是NN4、IE4+和W3C/Safari;这也造成了在不同的浏览器中处理event的差异,
- 二维数组二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列
- Python函数和代码复用什么是函数:  函数是一段具有特定功能的,可重用的语句组,通过函数名来表示和调
- python取余运算符是什么?python取余运算符是%,即表示取模,返回除法的余数。假设变量: a=10,b=20:那么b % a 输出结
- 图像的数组表示图像的RGB色彩模式图像一般使用RGB色彩模式,即每个像素点的颜色由红(R)、绿(G)、蓝(B)组成。RGB三个颜色通道的变化
- 互联网是一个飞速发展的行业,任何的止步不前都会导致被淘汰,只是时间早晚的问题,所以一个公司的学习与创新能力是非常重要的,特别是对于一个年轻的
- 我们使用 python setup.py install 来安装python包,但是如何卸载呢?只能手动删除安装的文件可以使用如下命令pyt
- using System;using System.Collections.Generic;using System.Linq;using
- 一.安装环境:Linux系统: CentOS 6.3 64位Oracle: Oracl
- 前言最开始想尝试在windows下面安装python3.6,虽然python安装成功,但在安装Cryto模块用pip3 install py
- 前言:array数组要转换成矩阵(matrix)数据类型才能进行一系列的线性运算。matrix类型也有时候要转换成array数组。代码:1.
- 本文为大家分享了python字典DICT类型合并的方法,供大家参考,具体内容如下我要的字典的键值有些是数据库中表的字段名, 但是有些却不是,
- python升级到2.7.13函数执行的结尾加上这个即可for x in locals().keys(): del locals