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,一经查实,立即删除!

相关文章

ddr2的上电顺序_关于内存的插入顺序的问题

展开全部#ifndef FUNS_H#define FUNS_Hvoid error( char *, ... ); /* 输出错误信32313133353236313431303231363533e59b9ee7ad9431333234323734息,退出程序 */void flush_stdin( void ); /* 清空“输入缓冲区” */#endif#ifndef SQLIST_H#define SQLIST_H#define I…

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

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

vue 样式绑定 class

<!--绑定样式&#xff1a;1. class 样式写法&#xff1a;:class"xxx" xxx 可以是字符串、对象、数组字符串写法适用于&#xff1a;类名不确定&#xff0c;要动态获取对象写法适用于&#xff1a;要绑定多个样式&#xff0c;个数不确定&#xff0c;名字也不确定数组…

python web后端和vue哪个难_全栈开发用纯后端模板与Vue+后端框架组合哪个好?

全栈开发没有明确的定义&#xff0c;但应该指的就是前端后端数据库。所以只用纯后端框架&#xff0c;不算全站开发。至少在Angularjs出现以前&#xff0c;我没听说过全站开发这个词。你问题描述中的感觉是对的&#xff0c;这就是前后端分离的好处。前后端分离就是&#xff1a;两…

MySQL 字段默认值该如何设置

MySQL 字段默认值该如何设置 前言&#xff1a; 在 MySQL 中&#xff0c;我们可以为表字段设置默认值&#xff0c;在表中插入一条新记录时&#xff0c;如果没有为某个字段赋值&#xff0c;系统就会自动为这个字段插入默认值。关于默认值&#xff0c;有些知识还是需要了解的&am…

vue 条件渲染 v-if | v-show

<!--条件渲染&#xff1a;1. v-if写法&#xff1a;(1). v-if"表达式"(2). v-else-if"表达式"(3). v-else"表达式"适用于&#xff1a;切换评率较低的场景特点&#xff1a;不展示的DOM元素直接被移除注意&#xff1a;v-if 可以和 v-else-if、v-…

unity摄影机depth模式_Unity3D Camera 摄像机属性详解

unity3d摄像机参数1.ClearFlags:清除标记。决定屏幕的哪部分将被清除。一般用户使用对台摄像机来描绘不同游戏对象的情况&#xff0c;有3中模式选择&#xff1a;Skybox&#xff1a;天空盒。默认模式。在屏幕中的空白部分将显示当前摄像机的天空盒。如果当前摄像机没有设置天空盒…

mysql,in中重复的记录也查出的方法

mysql&#xff0c;in中重复的记录也查出的方法 如题&#xff0c;举例说明下&#xff0c;假如where in (1,2,3,2,5,3);其中2&#xff0c;3都有重复的&#xff0c;想要让查出的记录数量和in中的相同&#xff0c;重复的也会显示重复的记录&#xff0c;就是得出的记录是6条。 in有…

vue 列表渲染 v-for

一、v-for 基本使用 <!--v-for 指令1. 用于展示列表数据2. 语法&#xff1a;v-for"(item, index) in xxx" :key"yyy"3. 可遍历&#xff1a;数组、对象、字符串&#xff08;用得少&#xff09;、指定次数&#xff08;用得少&#xff09; --> <div…

nginx 上传 文件超时设置_nginx限制上传大小和超时时间设置说明/php限制上传大小...

现象说明&#xff1a;在服务器上部署了一套后台环境&#xff0c;使用的是nginx反向代理tomcat架构&#xff0c;在后台里上传一个70M的视频文件&#xff0c;上传到一半就失效了&#xff01;原因是nginx配置里限制了上传文件的大小client_max_body_size&#xff1a;这个参数的设置…

Mysql 5.7 的‘虚拟列’是做什么?

Mysql 5.7 中推出了一个非常实用的功能 虚拟列 Generated (Virtual) Columns 对于它的用途&#xff0c;我们通过一个场景来说明 假设有一个表&#xff0c;其中包含一个 date 类型的列 SimpleDate dateSimpleDate 是一个常用的查询字段&#xff0c;并需要对其执行日期函数&a…

linux 快照

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

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

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

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

23种经典设计模式都有哪些&#xff0c;如何分类&#xff1f; 23种经典设计模式都有哪些&#xff0c;如何分类&#xff1f; java常用的设计模式&#xff1f;说明工厂模式 Java 中的23 种设计模式&#xff1a; Factory&#xff08;工厂模式&#xff09;&#xff0c; Builder&am…

vue 监视数据

一、Vue 会监视 data 中所有层次的数据 person: {name: mary,friends: [{name: bob, age: 18},{name: smith, age: 19}] } // 在 vm 上&#xff0c;都会为之配置 getter 和 setter 来检测数据二、监测对象中的数据 data 后追加的属性&#xff0c;Vue 默认不做响应式处理 dat…

五大常用算法学习笔记

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

stm32f429vref怎么接_STM32如何通过内部VREF得到实际的VDDA值

/****************************************************/// 程序用途&#xff1a;用来测试通过内部基准电压计算外部VDDA的值// 程序作者&#xff1a;孟瑞生// 微信公众号&#xff1a;科技老顽童/****************************************************/#include "stm32f…

处理表单数据

<!-- 收集表单数据&#xff1a;若&#xff1a;input:text&#xff0c;则v-model收集的是value的值&#xff0c;用户输入的就是value的值若&#xff1a;input:radio&#xff0c;则v-model收集的是value的值&#xff0c;且要给标签配置若&#xff1a;input:text&#xff0c;则…

史上最全的五大算法总结

分治算法 一、基本概念 在计算机科学中&#xff0c;分治法是一种很重要的算法。字面上的解释是“分而治之”&#xff0c;就是把一个复杂的问题分成两个或更多的相同或相似的子问题&#xff0c;再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解&#xff0c;原…

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

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