NAVICAT MYSQL 建表字段 默认值、EMPTY STRING、空白、NULL 的区别
Navicat mysql 建表字段 默认值、empty string、空白、NULL 的区别
总结在最后,没啥干货
简单测试了4种类型 bigint tinyint varchar char
单引号 ‘’
双引号 “”
自定义的默认值 如: 未知的姓名
===================================================
新建一张用户表
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.特殊情况,像是“备注”这种字段,不会成为查询条件的,就随意
写的不够严谨的地方,希望大家多多指正!
NAVICAT MYSQL 建表字段 默认值、EMPTY STRING、空白、NULL 的区别相关推荐
- mysql建表语句非空约束默认_Navicat mysql 建表字段 默认值 空白、NULL 、empty string的区别...
总结在最后,没啥干货 新建一张用户表CREATE TABLE `user` ( `id` bigint(20) DEFAULT NULL COMMENT '编号', `name` varchar(64 ...
- postgre 修改表字段默认值
修改表字段默认值 alter table alf_authority alter column downloadflag set default 'true'; alter table alf_aut ...
- mysql建表字段不能重复_MySQL建表的一些约束条件
1.SQL :结构化查询语言(Structer Query Language) 包含DDL,DCL ,DML,TCL四种语句 DDL:create / alter / drop DCL: grant ...
- mysql建表字段属性为clob_MySQL建表的优化策略
MySQL 建表的优化策略 目录 1. 字符集的选择 1 2. 主键 1 3. 外键 2 4. 索引 2 4.1. 以下情况适合于创建索引 2 4.2. 以下的情况下不适合创建索引 3 4.3. 联合 ...
- MySQL建表字段标红
字段在英文状态下的引号标红,切为中文状态下的引号后建表成功.
- mysql给字段设置默认值,以及mysql的严格模式
一.背景 在插入数据库时,报错#1364,后来才知道是字段在创建的时候,没有设置默认值的原因.关于默认值,我们都知道设置默认值为0或者null的时候,就算我们不插入该字段,数据库也会自动按照默认值填充 ...
- mysql+默认值+default_十六、MySQL 中数据类型的默认值 - default 约束-搜云库
MySQL 中,所有的数据类型,都可以显式或隐式的拥有默认值. 我们可以使用 DEFAULT 约束显式的为列指定一个默认值.比如 CREATE TABLE t1 ( i INT DEFAULT -1, ...
- php mysql 表字段_php mysql获取表字段名称和字段信息的三种方法
php mysql获取表字段名称和字段信息的三种方法 先给出本实例中使用的表的信息: 使用desc获取表字段信息 php代码如下: mysql_connect("localhost" ...
- MySQL 建表字段长度的限制问题
在MySQL建表时,遇到一个奇怪的现象: root@localhost : test 10:30:54>CREATE TABLE tb_test ( -> recordid varchar ...
最新文章
- 了解java虚拟机—垃圾回收算法(5)
- tp框架实现ajax
- 领航商务之选——金立M5 plus体验札记
- win7 第一次装 mysql-5.7-winx64 系列,不知道root 密码,该如何处理?
- 论文浅尝 | 利用开放域触发器知识改进事件检测
- python encode和decode函数说明
- MATLAB函数 zp2tf详解
- L298N电机驱动模块《转》。
- 天正电气lisp是什么文件_电气CAD绘图基础幻灯片
- 关系数据库规范化理论
- python程序设计,猜数游戏编程实践课程实验
- Python+Vue计算机毕业设计报刊征订管理系统uu609(源码+程序+LW+部署)
- Java实现若干个数计算平均值并保留小数位 java计算平均值 java四舍五入保留小数
- 基于PHP+MySQL大连真爱果汁厂管理系统的设计与实现
- 等价无穷小替换及其习题 笔记
- 互联网的下一波红利在哪里?
- 内蒙古自治区如何应对农村生活污水处理?
- matlab声音信号时域频域转换,关于处理用采集卡采集到的声音时域信号转化成频域信号........
- VSCode: 快速生成 html 骨架和在浏览器中打开
- 【重要】kubeadm高可用master节点(三主两从)
热门文章
- k8s安装sqlite3_kubernetes环境部署单节点redis数据库的方法
- php setcookie 过期,php cookie怎么设置过期时间?
- Java File类File [] listFiles()方法(带示例)
- abap 添加alv上的工具栏的按钮_神器必会!“世界上最好的编辑器Source Insight”...
- Java编程经典10道_Java经典编程题50道之十二
- python学完面向对象之后_Python学完基础语法后,再往后应该学什么?
- math.fabs_带有Python示例的math.fabs()方法
- Redis使用不当导致应用卡死
- C#单例模式的简单使用
- 恢复Linux系统权限