MySQL在建表时,需要有字段名称字段类型约束条件,其中字段名称和字段类型是必填的,约束条件是选填的,约束条件主要有PRIMARY KEY、UNIQUE、NOT NULL、DEFAULT等, 一个完整的建表语句如下:

CREATE TABLE employees( 工号 varchar(4) PRIMARY KEY, 姓名 VARCHAR(10) NOT NULL , 年龄 INT DEFAULT 18);

约束条件分别为:工号作为主键,姓名非空,年龄默认为18,建完表后,可以向表里插入输入,例如:INSERT INTO employees VALUE("0001","张三",30);

这样就完成了建表和导数的操作(一般导数都是从外部文件直接导入数据,这里不讲),接下来详细介绍NOT NULL和DEFAULT这两个约束条件。

1.NOT NULL

NOT NULL是非空的约束,也就是不能向表里插入空值,我们还是用employees这个表,现在向表里插入数据: INTSERT INTO employees VALUE("0002", NULL, 22);会报错,因为在建表时,姓名字段的约束条件是NOT NULL。

““空字符串不等同于NULL,我们向表里的姓名字段插入空字符串,INSERT INTO employees VALUE("0003","",18);是不会报错的,在MySQL里,”“空字符串不是NULL,如果想要输入空值必须是NULL,另外空字符串是可以计算的,比如 SELECT length(””); SELECT “”+1; 都是由结果输出的。

2.DEFAULT

DEFAULT是在不给字段输入值时,默认返回的结果,我们在创建employees表时,年龄字段默认为18,向表插入数据:INSERT INTO employees(工号,姓名) VALUE("0004","王五"),没有向年龄字段插入数据,会自动填充18。

当给年龄字段插入数据,比如空值,是不会触发default的,向表插入数据:INSERT INTO employees VALUE("0004", "王五", NULL),插入的数据就算是NULL而不是18,DEFAULT只有在不给字段数据时才会使用

3. NOT NULL和DEFAULT有没有必要用在一个字段的约束上

建表语句如下,我们给姓名字段的约束是非空,如果不给数据,默认为未知:

CREATE TABLE employees2( 工号 VARCHAR(4) PRIMARY, 姓名 VARCHAR(10) NOT NULL DEFAULT "未知" , 年龄 INT);

[姓名字段上不给值可以(用默认的“位置”)。但是要给的话,一定不能给NULL值]

根据上文对NOT NULL和DEFAULT的介绍,当想表插入数据时,如果给姓名字段具体值时不会报错;如果给了姓名字段空值,INSERT INTO employees VALUE("0001", NULL, 22),会触发NOT NULL约束,不会触发DEFAULT约束,因为DEFAULT只有在不给字段数据时才会使用,所以此条语句报错(填入了空值);如果不给姓名字段数据,INSERT INTO employees (工号,年龄) VALUE("0002",22),会触发DEFAULT,给姓名默认值"未知"。

所以NOT NULL和DEFAULT是两个独立的约束,可以用在一个字段上,但不会交互使用,是两个独立的约束条件。另外约束条件不仅是在插入数据时有用,当我们在对表数据进行修改时,也会受到约束条件的限制。

MySQL 浅谈NOT NULL和DEFAULT的关系相关推荐

  1. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

  2. python文本框与数据库的关联_Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理...

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3. ...

  3. python axes_浅谈matplotlib.pyplot与axes的关系

    最近在学习数据可视化,梳理一下其中一些诸如pandas绘图.matplotlib绘图.pyplot(plt).axes等概念. 重要的事情说三遍:axes不是axis!axes不是axis!axes不 ...

  4. MySQL唯一索引和NULL空值之间的关系

    <Oracle唯一索引和NULL空值之间的关系>提到了当存在唯一索引的时候,不能插入两条(1, 'a', null),但是有朋友说,MySQL允许,实测一下, root@mysqldb: ...

  5. 张钹院士:浅谈人工智能与大数据的关系

    来源:联合时报 本文共2385字,建议阅读5分钟. 本文主要浅谈了人工智能和大数据的关系以及中国在人工只能领域对世界的超越. 中国科学院院士张钹对国内外人工智能产业发展现状,提出我国仅靠跟随性的应用深 ...

  6. MySQL浅谈 LEFT JOIN

    On条件(在"A left join b on conditional_expr")决定如何从table B 中检索数据行(Matching-State); 如果B中没有行匹配On ...

  7. escilpse 连接mysql,浅谈docker-compose网络设置之networks

    networks使用方式之官网教程 networks通常应用于集群服务,从而使得不同的应用程序得以在相同的网络中运行,从而解决网络隔离问题.这种应用在swarm部署中,非常常见.不过,本文并不做讨论. ...

  8. MYSQL 浅谈MyISAM 存储引擎

    思维导图 介绍 mysql中用的最多存储引擎就是innodb和myisam.做为Mysql的默认存储引擎,myisam值得我们学习一下,以下是我对<高性能MYSQL>书中提到的myisam ...

  9. [MySQL] 浅谈InnoDB存储引擎

    InnoDB是事务安全的存储引擎,设计上借鉴了很多Oracle的架构思想,一般而言,在OLTP应用中,InnoDB应该作为核心应用表的首先存储引擎.InnoDB是由第三方的Innobase Oy公司开 ...

  10. 浅谈BI和大数据的关系

    欢迎进QQ群讨论:672600296 ---------------------------------------------------------------------- 前言 最近发现很多人 ...

最新文章

  1. Java对线_新手如何通过练习打好Java基础?
  2. python类型-Python数据类型详解
  3. 用python做web小项目_Python之路【第十八篇】Django小项目webQQ实现
  4. jQuery实战之 attr() 和 prop() 的区别
  5. OpenCASCADE:Foundation Classes之数学原语和算法
  6. C#操作SQLite数据库增、删、改、查 实例
  7. 带头结点的单链表删除
  8. JavaEE 微信支付
  9. 虹科新品 | 需要进行高功率,大规模的测试控制?这款5A功率高密度继电器模块你一定不能错过!
  10. win7计算机启动遇到错误怎么办,W7电脑系统出现Windows错误恢复该怎么办
  11. 压缩包密码破解-PkCrack(明文攻击)
  12. Java Swing制作古老的打砖块游戏
  13. 5G网络身份识别---详解5G-GUTI
  14. 加拿大IC VOC和无线产品IC ID认证
  15. 第九周项目三小星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星星
  16. 南非银行“内鬼”偷走主密钥,后将更换1200万张客户卡,损失惨重
  17. html做旋转的五角星,Flash AS3代码制作旋转彩色五角星动画
  18. 【WLAN】【测试】如何使用MacBook进行WiFi无线空口抓包
  19. AV终结者技术大曝光(另附AV终结者10大死法)
  20. android M自带铃声壁纸,​Android Q 内置壁纸、铃声,带你提前进入Q时代。

热门文章

  1. ES6 Symbol之浅入解读
  2. HCIE理论-IPV6
  3. .NET设计模式(9):桥接模式(Bridge Pattern)(转)
  4. VSAN 和 VDP 的互操作
  5. 长跑常用必知的关键字及100条跑步的建议
  6. Android 开发错误集锦
  7. Struts2.3.1.2安装
  8. android下md5加密
  9. Facebook vs Chrome 关公秦琼的未来之战,互联网营销
  10. 16.淘宝的架构演化案例