mysql建表语句非空约束默认_Navicat mysql 建表字段 默认值 空白、NULL 、empty string的区别...
总结在最后,没啥干货
新建一张用户表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的区别...相关推荐
- 自动获取mysql建表语句_脚本工具---自动解析mysql建表语句,生成sqlalchemy表对象声明...
常规建表语句: CREATE TABLE `test_table` ( `id` int(11) NOT NULL, `name` char(64) NOT NULL, `password` char ...
- MySQL 基础 -- 约束(非空约束、唯一约束、主键约束、默认约束、检查约束、外键约束)
1. 约束 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据. 目的:保证数据库中数据的正确.有效性和完整性. 约束分类: 1.1 约束演示:不含外键约束 案例需求: 根据需求,完成表结构 ...
- SQL语句 -非空约束 - 唯一约束 - 主键约束 - 默认约束 -外键约束
文章目录 约束 约束介绍和分类 非空约束 唯一约束 主键约束 默认约束 案例练习 外键约束 约束 约束介绍和分类 约束的概念: 约束是作用于表中列上的规则,用于限制加入表的数据 约束的存在保证了数据库 ...
- 数据库-----(主键约束、唯一约束、默认约束、非空约束、外键约束)
文章目录 一.数据的完整性 二.实体完整性约束 2.1.主键约束(唯一.不重复.不能为空) (1)建表时直接添加 (2)通过ALTER语句(针对已存在的表) (3)删除主键约束 2.2唯一约束(唯一. ...
- 用来测试的mysql建表语句_软件测试基础——MySQL建库、建表SQL语句
一.对库的操作 创建库:create database 库名 ; 创建指定字符集的库:create database 库名 charset=utf8; 创建指定字符集并带校验规则的库:create d ...
- MySQL约束-自增长约束(auto_increment)、非空约束(not null)、唯一约束(unique)
目录 自增长约束概念 特点 自增字段初始值 delete和truncate在删除后自增列的变化 非空约束概念 删除非空约束 唯一约束概念 文末资源推荐 每文一语 自增长约束概念 在 MySQL 中,当 ...
- 【MySQL8.0学习笔记】约束:主键约束、自增长约束、非空约束、唯一性约束、默认约束与零填充约束
本文对MySQL数据库的约束相关知识进行了归纳总结,包括主键约束.自增长约束.非空约束.唯一性约束.默认约束与零填充约束. 本专栏长期更新,敬请关注. 文章目录 1 MySQL约束简介 2 主键约束 ...
- php mysql 非空_MySQL非空约束(NOT NULL)
MySQL 非空约束(NOT NULL)可以通过 CREATE TABLE 或 ALTER TABLE 语句实现.在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空 ...
- MySQL 非空约束(NOT NULL)入门
MySQL 非空约束(NOT NULL)指字段的值不能为空.对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错.可以通过 CREATE TABLE 或 ALTER TABLE ...
最新文章
- python游戏编程入门txt-Python真好玩:教孩子学编程 PDF 完整原版
- python无法打印unicode编码_【整理】Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来或打印出来却是乱码...
- 集群中的session共享存储 实现会话保持
- win7安装mysql5.8
- SAP Cloud for Customer的跳转链接制作navigation link
- 正则表达式语法(转)
- ios realm 文件_iOS开发中使用Realm数据库
- 【渝粤教育】广东开放大学 Photoshop 图像处理 形成性考核 (24)
- SpringJDBC解析3-回调函数(update为例)
- 一针一线皆关“云” 报喜鸟以匠心融合科技
- NLP任务增强:通过引入外部知识来提供额外信息
- 蓝桥杯 ALGO-140 算法训练 P1101
- std::string begin end
- Java SSM框架简介
- Relatively Prime Graph(贪心+注意数据范围)
- pgsql timestamp without time zone > character varying解决方案
- mysql面试题总结
- 多年编码经验血泪史总结,你若想学Python,必须看完这几点再做决定
- 数藏行业公众号裂变,单日拉新8w+,实现低成本获客?
- 2021学前端真的没前途了吗?