NAVICAT MYSQL 建表字段 默认值、EMPTY STRING、空白、NULL 的区别
Navicat mysql 建表字段 默認值、empty string、空白、NULL 的區(qū)別
總結(jié)在最后,沒啥干貨
簡單測試了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;這張表 由于沒設(shè)置主鍵 所以可以新增一條 4個字段都是null的數(shù)據(jù) (當然這樣的數(shù)據(jù)是毫無意義的)
所有的字段默認值都是 NULL
一. 不做非空約束
1)將所有字段全部設(shè)置為空白【NULL>>空白】
SQL預(yù)覽
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`;保存結(jié)果:成功,表結(jié)構(gòu)沒有改變
結(jié)論:不做非空約束時,空白 和 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`;保存結(jié)果:失敗,報錯【1067 - Invalid default value for ‘id’】
其實從改動的sql語句中就能看出來 數(shù)字是不存在 ‘’ 這種類型的
結(jié)論:無非空約束時,bigint、tinyint類型都不能被設(shè)置為 Empty string
此時的表結(jié)構(gòu)
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設(shè)置值’’ “” 或者’未知名稱’的區(qū)別】
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保存結(jié)果:成功,表結(jié)構(gòu)沒有改變
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`;保存結(jié)果:成功,表結(jié)構(gòu)如下
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;該表結(jié)構(gòu),如果新增一條數(shù)據(jù)
INSERT INTO `user` (age) VALUES (10);得到的數(shù)據(jù)是這樣的
你可以不設(shè)置值,數(shù)據(jù)庫自動設(shè)置了默認值,但是這里會有個陷阱
INSERT INTO `user` (name, age) VALUES (NULL, 11);沒有使用默認值哦,在使用類似PageHelper這樣的插件時,注意 insert insertSelective兩種方法
小結(jié):不做非空約束時,empty string只針對 字符 類型的字段使用,’'和""同empty string的效果是相同的;空白 和 NULL的效果是相同的
二. 勾選“不是null”
恢復(fù)為初始狀態(tài),勾選“不是null”表結(jié)構(gòu)如下
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`;保存結(jié)果:成功,表結(jié)構(gòu)無變化
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`,保存結(jié)果:成功,表結(jié)構(gòu)如下
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設(shè)置成’'再選擇成空白,導致保存失敗,sql語句是
MODIFY COLUMN `id` bigint(20) NOT NULL DEFAULT '' COMMENT '編號' FIRST ;選擇NULL才可以恢復(fù),可能是我使用的版本問題
小結(jié): 勾選“不是null”時,empty string只針對 字符 類型的字段使用,’'和""同empty string的效果是相同的;空白 和 NULL的效果是相同的
總結(jié):
1.’'和""同Empty string的效果是相同的(沒有內(nèi)容長度的默認值)
只能使用在字符類型 如: char、varchar、text等,不能使用在數(shù)字、時間等類型 如:int、tinyint、bigint、date、double
因為會提示報錯
2.空白 和 NULL的效果是相同的,具體情況取決于【非空約束】
a. 無非空約束: 都是 DEFAULT NULL
b. 有非空約束: 都是 NOT NULL
3.如果感覺看不太明白,建議自己動手測試一下
畢竟1個字段上最直觀的展現(xiàn)就DDL語句
博主,你的文筆太垃圾了,每一個字我都認識,連在一起看的我云里霧里的,給點干貨?
1.字段勾選上 不是 null
2.設(shè)置默認值
3.特殊情況,像是“備注”這種字段,不會成為查詢條件的,就隨意
寫的不夠嚴謹?shù)牡胤?#xff0c;希望大家多多指正!
總結(jié)
以上是生活随笔為你收集整理的NAVICAT MYSQL 建表字段 默认值、EMPTY STRING、空白、NULL 的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编解析(3)-nasm基础、物理地址
- 下一篇: python精要(71)-VMDK操作(