总结在最后,没啥干货

新建一张用户表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;

一. 不做非空约束

1)将所有字段全部设置为空白

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`;

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

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

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'】

此时的表结构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;

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.

保存结果:成功,表结构如下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;

小结:

二. 勾选“不是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`;

保存结果:成功,表结构如下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)修改为:NULLALTER 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`;

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

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;

这里遇到一个情况

如果是bigit设置成''再选择成空白,sql语句是,导致保存失败MODIFY COLUMN `id` bigint(20) NOT NULL DEFAULT '' COMMENT '编号' FIRST ;

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

勾选“不是null”时,

总结:

区别在于是否进行了非空约束

3. 从现实的使用场景中要考虑的地方

NULL导致索引失效,在使用当中尽可能避免NULL值的出现

a.没有非空约束的字段,加上默认值

b.有非空约束的字段就需要注意:默认值在程序代码中的判断方式

可能之前的判断方式是if(id == null){ alert("该用户不存在") }else{ 发送ajax请求到后台查询 }现在就必须是这样了if(id == 0){ alert("该用户不存在") }else{ 发送ajax请求到后台查询 }

虽然不改看起来没什么错误,但一次无效的操作应当从源头上避免

所以在一开始设计数据库时应当考虑到这个情况,不然数据库字段好改,检查程序代码就要费很大的精力

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

mysql建表语句非空约束默认_Navicat mysql 建表字段 默认值 空白、NULL 、empty string的区别...相关推荐

  1. 自动获取mysql建表语句_脚本工具---自动解析mysql建表语句,生成sqlalchemy表对象声明...

    常规建表语句: CREATE TABLE `test_table` ( `id` int(11) NOT NULL, `name` char(64) NOT NULL, `password` char ...

  2. MySQL 基础 -- 约束(非空约束、唯一约束、主键约束、默认约束、检查约束、外键约束)

    1. 约束 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据. 目的:保证数据库中数据的正确.有效性和完整性. 约束分类: 1.1 约束演示:不含外键约束 案例需求: 根据需求,完成表结构 ...

  3. SQL语句 -非空约束 - 唯一约束 - 主键约束 - 默认约束 -外键约束

    文章目录 约束 约束介绍和分类 非空约束 唯一约束 主键约束 默认约束 案例练习 外键约束 约束 约束介绍和分类 约束的概念: 约束是作用于表中列上的规则,用于限制加入表的数据 约束的存在保证了数据库 ...

  4. 数据库-----(主键约束、唯一约束、默认约束、非空约束、外键约束)

    文章目录 一.数据的完整性 二.实体完整性约束 2.1.主键约束(唯一.不重复.不能为空) (1)建表时直接添加 (2)通过ALTER语句(针对已存在的表) (3)删除主键约束 2.2唯一约束(唯一. ...

  5. 用来测试的mysql建表语句_软件测试基础——MySQL建库、建表SQL语句

    一.对库的操作 创建库:create database 库名 ; 创建指定字符集的库:create database 库名 charset=utf8; 创建指定字符集并带校验规则的库:create d ...

  6. MySQL约束-自增长约束(auto_increment)、非空约束(not null)、唯一约束(unique)

    目录 自增长约束概念 特点 自增字段初始值 delete和truncate在删除后自增列的变化 非空约束概念 删除非空约束 唯一约束概念 文末资源推荐 每文一语 自增长约束概念 在 MySQL 中,当 ...

  7. 【MySQL8.0学习笔记】约束:主键约束、自增长约束、非空约束、唯一性约束、默认约束与零填充约束

    本文对MySQL数据库的约束相关知识进行了归纳总结,包括主键约束.自增长约束.非空约束.唯一性约束.默认约束与零填充约束. 本专栏长期更新,敬请关注. 文章目录 1 MySQL约束简介 2 主键约束 ...

  8. php mysql 非空_MySQL非空约束(NOT NULL)

    MySQL 非空约束(NOT NULL)可以通过 CREATE TABLE 或 ALTER TABLE 语句实现.在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空 ...

  9. MySQL 非空约束(NOT NULL)入门

    MySQL 非空约束(NOT NULL)指字段的值不能为空.对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错.可以通过 CREATE TABLE 或 ALTER TABLE ...

最新文章

  1. python游戏编程入门txt-Python真好玩:教孩子学编程 PDF 完整原版
  2. python无法打印unicode编码_【整理】Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来或打印出来却是乱码...
  3. 集群中的session共享存储 实现会话保持
  4. win7安装mysql5.8
  5. SAP Cloud for Customer的跳转链接制作navigation link
  6. 正则表达式语法(转)
  7. ios realm 文件_iOS开发中使用Realm数据库
  8. 【渝粤教育】广东开放大学 Photoshop 图像处理 形成性考核 (24)
  9. SpringJDBC解析3-回调函数(update为例)
  10. 一针一线皆关“云” 报喜鸟以匠心融合科技
  11. NLP任务增强:通过引入外部知识来提供额外信息
  12. 蓝桥杯 ALGO-140 算法训练 P1101
  13. std::string begin end
  14. Java SSM框架简介
  15. Relatively Prime Graph(贪心+注意数据范围)
  16. pgsql timestamp without time zone > character varying解决方案
  17. mysql面试题总结
  18. 多年编码经验血泪史总结,你若想学Python,必须看完这几点再做决定
  19. 数藏行业公众号裂变,单日拉新8w+,实现低成本获客?
  20. 2021学前端真的没前途了吗?

热门文章

  1. 模拟电话设置座机不能外呼,且呼入时呼叫转移到手机
  2. H.迷宫,(算法选修)
  3. 判定是否互为字符重排(入门算法30)
  4. 通过工业智能网关实现设备综合效率监测及远程维护上下载
  5. 实现对第三方论坛的统一登陆几种方法
  6. 【box-shadow盒子内边阴影外阴影】
  7. 小米8 android p 公测,小米8 Android P内测9月开启
  8. 使用pip安装PyTorch
  9. 教你轻松一键安装win10系统
  10. 在Microsoft Teams中,以一个已经存在的Team作为模板创建Team