NAVICAT MYSQL 建表字段 默认值、EMPTY STRING、空白、NULL 的区别

Navicat mysql 建表字段 默认值、empty string、空白、NULL 的区别

总结在最后,没啥干货

简单测试了4种类型 bigint tinyint varchar char

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0jjMUIj9-1640790465517)(/images/731/8353641092d4b4e86dc1631fdc4e0a83.png)]

单引号 ‘’

双引号 “”

自定义的默认值 如: 未知的姓名

===================================================

新建一张用户表

CREATE TABLE `user` (`id` bigint(20) DEFAULT NULL COMMENT '编号',`name` varchar(64) DEFAULT NULL COMMENT '姓名',`gender` char(64) DEFAULT NULL COMMENT '性别',`age` tinyint(4) DEFAULT NULL COMMENT '年龄'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这张表 由于没设置主键 所以可以新增一条 4个字段都是null的数据 (当然这样的数据是毫无意义的)

所有的字段默认值都是 NULL

在这里插入图片描述

一. 不做非空约束

在这里插入图片描述

1)将所有字段全部设置为空白【NULL>>空白】

SQL预览

ALTER TABLE `user`
MODIFY COLUMN `id`  bigint(20) NULL COMMENT '编号' FIRST ,
MODIFY COLUMN `name`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '姓名' AFTER `id`,
MODIFY COLUMN `gender`  char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '性别' AFTER `name`,
MODIFY COLUMN `age`  tinyint(4) NULL COMMENT '年龄' AFTER `gender`; 

保存结果:成功,表结构没有改变

结论:不做非空约束时,空白 和 NULL 是相同的

2)NULL值是默认的,也不需要测试了【NULL>>NULL】

3)全部修改为 Empty string【NULL>>Empty string】

ALTER TABLE `user`
MODIFY COLUMN `id`  bigint(20) NULL DEFAULT '' COMMENT '编号' FIRST ,
MODIFY COLUMN `name`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '姓名' AFTER `id`,
MODIFY COLUMN `gender`  char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '性别' AFTER `name`,
MODIFY COLUMN `age`  tinyint(4) NULL DEFAULT '' COMMENT '年龄' AFTER `gender`;

保存结果:失败,报错【1067 - Invalid default value for ‘id’】

其实从改动的sql语句中就能看出来 数字是不存在 ‘’ 这种类型的

结论:无非空约束时,bigint、tinyint类型都不能被设置为 Empty string

此时的表结构

CREATE TABLE `user` (`id` bigint(20) DEFAULT NULL COMMENT '编号',`name` varchar(64) DEFAULT '' COMMENT '姓名',`gender` char(64) DEFAULT '' COMMENT '性别',`age` tinyint(4) DEFAULT NULL COMMENT '年龄'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

那么这里就有一个疑问了【如果我手动给name、age设置值’’ “” 或者’未知名称’的区别】

a.

ALTER TABLE `user`
MODIFY COLUMN `name`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '姓名' AFTER `id`,
MODIFY COLUMN `gender`  char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '性别' AFTER `name`;

b.

ALTER TABLE `user`
MODIFY COLUMN `name`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT "" COMMENT '姓名' AFTER `id`,
MODIFY COLUMN `gender`  char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT "" COMMENT '性别' AFTER `name`;

a、b保存结果:成功,表结构没有改变

c.

ALTER TABLE `user`
MODIFY COLUMN `name`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '未知名称' COMMENT '姓名' AFTER `id`,
MODIFY COLUMN `gender`  char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '未知性别' COMMENT '性别' AFTER `name`; 

保存结果:成功,表结构如下

CREATE TABLE `user` (`id` bigint(20) DEFAULT NULL COMMENT '编号',`name` varchar(64) DEFAULT '未知名称' COMMENT '姓名',`gender` char(64) DEFAULT '未知性别' COMMENT '性别',`age` tinyint(4) DEFAULT NULL COMMENT '年龄'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

该表结构,如果新增一条数据

INSERT INTO `user` (age) VALUES	(10);   

得到的数据是这样的

在这里插入图片描述

你可以不设置值,数据库自动设置了默认值,但是这里会有个陷阱

INSERT INTO `user` (name, age) VALUES (NULL, 11);

在这里插入图片描述

没有使用默认值哦,在使用类似PageHelper这样的插件时,注意 insert insertSelective两种方法

小结:不做非空约束时,empty string只针对 字符 类型的字段使用,’'和""同empty string的效果是相同的;空白 和 NULL的效果是相同的

二. 勾选“不是null”

在这里插入图片描述

恢复为初始状态,勾选“不是null”表结构如下

CREATE TABLE `user` (`id` bigint(20) NOT NULL COMMENT '编号',`name` varchar(64) NOT NULL COMMENT '姓名',`gender` char(64) NOT NULL COMMENT '性别',`age` tinyint(4) NOT NULL COMMENT '年龄'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

此时,所有字段默认都变成了 空白

在这里插入图片描述

1)默认为空白,跳过【空白>>空白】

2)修改为:NULL【空白>>NULL】

ALTER TABLE `user`
MODIFY COLUMN `id`  bigint(20) NOT NULL COMMENT '编号' FIRST ,
MODIFY COLUMN `name`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名' AFTER `id`,
MODIFY COLUMN `gender`  char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '性别' AFTER `name`,
MODIFY COLUMN `age`  tinyint(4) NOT NULL COMMENT '年龄' AFTER `gender`;

保存结果:成功,表结构无变化

3)修改为:Empty string或者 ‘’ 或者 “”【空白>>Empty string】【空白>>’’】【空白>>""】,忽略bigint tinyint

ALTER TABLE `user`
MODIFY COLUMN `name`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '姓名' AFTER `id`,
MODIFY COLUMN `gender`  char(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '性别' AFTER `name`,

保存结果:成功,表结构如下

CREATE TABLE `user` (`id` bigint(20) NOT NULL COMMENT '编号',`name` varchar(64) NOT NULL DEFAULT '' COMMENT '姓名',`gender` char(64) NOT NULL DEFAULT '' COMMENT '性别',`age` tinyint(4) NOT NULL COMMENT '年龄'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这里遇到一个情况

如果是bigint设置成’'再选择成空白,导致保存失败,sql语句是

MODIFY COLUMN `id`  bigint(20) NOT NULL DEFAULT '' COMMENT '编号' FIRST ;

选择NULL才可以恢复,可能是我使用的版本问题

小结: 勾选“不是null”时,empty string只针对 字符 类型的字段使用,’'和""同empty string的效果是相同的;空白 和 NULL的效果是相同的

总结:

1.’'和""同Empty string的效果是相同的(没有内容长度的默认值)

只能使用在字符类型 如: char、varchar、text等,不能使用在数字、时间等类型 如:int、tinyint、bigint、date、double

因为会提示报错

在这里插入图片描述

2.空白 和 NULL的效果是相同的,具体情况取决于【非空约束】

a. 非空约束: 都是 DEFAULT NULL

b. 非空约束: 都是 NOT NULL

3.如果感觉看不太明白,建议自己动手测试一下

毕竟1个字段上最直观的展现就DDL语句

博主,你的文笔太垃圾了,每一个字我都认识,连在一起看的我云里雾里的,给点干货?

1.字段勾选上 不是 null

2.设置默认值

3.特殊情况,像是“备注”这种字段,不会成为查询条件的,就随意

写的不够严谨的地方,希望大家多多指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将vue项目打包为.apk文件

说明:使用Vue.js开发完毕的app一般不作处理的话,就只能在浏览器上做为Webapp使用。如果需要将它安装到安卓手机上就需要打包为.apk文件了。 前提:安装HBuilderX 具体步骤: 1.在vue项目中找到config/build.js 2.找到build下的a…

linux 快照

一、快照管理器 二、选择保存的快照 — 出错了方便回去

工作琐事太多怎么办_东莞夫妻感情不合怎么办 东莞专业离婚咨询

东莞夫妻感情不合怎么办 东莞专业离婚咨询工作中的琐事影响感情交流,当然什么事也没有但我却打他,还有一些行刑人在旁边站着。行为泼辣得不到观众的好感。对当时的一些知识和政界发生。只记得内容是希望他好自为之,生活中她是位的。苏菲宗派里…

23种经典设计模式都有哪些,如何分类?Java设计模式相关面试

23种经典设计模式都有哪些,如何分类? 23种经典设计模式都有哪些,如何分类? java常用的设计模式?说明工厂模式 Java 中的23 种设计模式: Factory(工厂模式), Builder&am…

五大常用算法学习笔记

一、分治算法:快速排序、归并排序、大整数乘法、二分查找、递归(汉诺塔) 基本概念:把一个复杂的问题分成若干个相同或相似的子问题,再把子问题分成更小的子问题… , 知道最后子问题可以简单的直接求解&…

8客户端安装后无法启动_新君越涉水后车辆无法启动

车型:2010君越故障现象:涉水后车辆无法启动询问客户:涉水的水深10cm左右。 外观检查:TCM连接器进水、其它没发现进水迹象使用压缩空气吹干TCM连接器的进水,并处理机舱的接地点。GDS检测:U0074,控制模块通信…

Java中的return this

Java中的return this return this就是返回当前对象的引用(就是实际调用这个方法的实例化对象) 示例: /*** 资源url*/public HttpConfig url(String url) {urls.set(url);//return this就是返回当前对象的引用(就是实际调用这个方法的实例化对象)return this;}调用…

mybatis 依赖于jdbc_大数据基础:Mybatis零基础入门

在Java企业级开发任务当中,持久层框架的选择,国内市场的主流选择一定有Mybatis的一席之地,从入门来说,Mybatis的学习难度不算高,但是要把Mybatis发挥出真正的效用,还是需要深入学习的。今天的大数据基础分享…

kendo treeview 修改节点显示值_VBA学习笔记60-1: Treeview控件

学习资源:《Excel VBA从入门到进阶》第60集 by兰色幻想本节讲Treeview控件。TreeView控件是以树形结构显示数据的控件。利用TreeView控件,可以设计出树形结构图,便于用户选择不同的项目。总公司人事结构是一级节点,公司一、公司二…

Java之路:this关键字的用法

(1)this代表当前对象的一个引用。所谓当前对象,指的是调用类中方法或属性的那个对象。 最经常使用this关键字的情况,是在对象的一个属性被方法或构造器的参数屏蔽时,需要调用这个被屏蔽的属性,如下&#xf…

跑分cpu_一加8T现身跑分网站:CPU正式敲定 10月15日见

一加8T将于10月15日发布(海外版将于10月14日发布),现在关于一加8T的核心规格确认。今天,一加8T现身GeekBench跑分网站,确认该机搭载的是高通骁龙865旗舰处理器,而非高通骁龙865 Plus。与搭载高通骁龙865的一加8相比,一…

发那科攻丝回退参数_乐享:发那科MF选配功能诊断小结

小编微信:shukong99999乐享数控,专注数控电气乐享那科选项功能小结大家好,我是乐享数控,好久不见,今天起,给大家多总结,相互交流进步。1发那科MF选项功能诊断小结在调试过程中,除了M…

matlab怎么画二维热力图_[原创]Day3.箱线图和热力图的绘制

使用Matplotlib和Seaborn进行绘制箱线图和热力图。箱线图箱线图(boxplot)又称盒式图,可以显示数据的分散情况,由五个数值点组成:最大值(max)-上界、最小值(min)-下界、中位数(median)和上下四分位数(Q1, Q3)。它可以帮我们分析出数据的差异性…

vue图片点击超链接_10秒钟,告别ppt中难看的超链接

我相信大多数同学在创建超链接的时候都很疑惑为什么字体颜色会变成蓝色,且下方会出现一条横线,能不能把横线去掉或者改变颜色呢?零壹君回答你:能!快来跟零壹君一起学习吧!选中文字—点击【插入】—【超链接…

arr数组怎么取值_记一次思否问答的问题思考:Vue为什么不能检测数组变动

作者 | hfhan来源 | https://segmentfault.com/a/1190000015783546问题描述:Vue检测数据的变动是通过Object.defineProperty实现的,所以无法监听数组的添加操作是可以理解的,因为是在构造函数中就已经为所有属性做了这个检测绑定操作。但是官…

使用 ref 对已渲染到页面的节点进行标记

一、字符串形式的 ref <input type"text" /*给标签打上标记 ipt */ ref"ipt" />拿到标记的节点&#xff0c;对其进行操作 handleClick () > {console.log(this);// 用 ref 标记了的标签&#xff0c;都会保存在 refs 里面console.log(this.refs…

JAVA之private修饰成员方法默认是final型的?

Java之private修饰成员方法默认是final型的&#xff1f; private修饰的成员方法默认是final型的&#xff1f; 用fianl声明的成员方法是最终方法&#xff0c;最终方法不能被子类覆盖&#xff08;重写&#xff09; 从表面上看这个命题是错误的&#xff0c;private访问修饰符修饰…

程序员你真的理解final关键字吗?

文章目录1、修饰类2、修饰方法3、修饰变量4、final变量修饰变量&#xff08;成员变量、局部变量&#xff09;4、1 final修饰成员变量&#xff1a;4、2 final修饰局部变量&#xff1a;5、final变量和普通变量的区别6、final与static的藕断丝连7、关于final修饰参数的争议前言 提…

axios vue 动态date_Web前端Vue系列之-Vue.js 实战

课程简介&#xff1a;课程目标&#xff1a;通过本课程的学习&#xff0c;让大家掌握Vue.js的进阶知识并在项目中应用。适用人群&#xff1a;具有一定vue开发基础的开发人员。课程概述&#xff1a;Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式Jav…

vue 组件 - 非单文件组件

一、定义组件 const school Vue.extend({name: xuexiao, // ----------------------------> 指定组件在开发者工具中显示的名字template: // ----------------------------> 模板<div>... 此处是结构</div>,data() { // ---------------------------->…