上节连接:https://www.cnblogs.com/RajXie/p/10880809.html

上节说到,在创建表的同时,需要给出列的定义。列的定义可展开如下:

列名 列的数据类型 列的一些其他属性(可选)

由于列名可自定义,故这里不做详细探讨。建议不要使用关键字或保留字即可,非要使用的话就得加上反引号了(``),唯有如此,才能让程序有效地将它们区分开。接下来,主要来学习一下列的数据类型及列的一些其他属性吧。

本文概览:

(一)列的数据类型

(二)列的一些其他属性

ps:

原本打算自己写的,适才发现实在没有必要错过网上一些良好的资源。以下列举数据类型的截图来自菜鸟教程,若您想查看原文,还请点击下面的链接进行查阅:https://www.runoob.com/mysql/mysql-data-types.html 。即便如此,笔者还是建议您予以重视,因为列的数据类型还是蛮重要的(笔者亲身经历过的一次笔试,其第一道题即要求列出某个数据库的数据类型),何况其中不是一味照搬,还会有一些讲解来辅助您的理解。

(一)列的数据类型


在创建表的时候,决定每一列将存储什么样类型的数据是必须的,因为这直接关系到对存储空间的占用(无论是硬盘还是内存)。

ps: 对于存储在硬盘上应该是没有什么异议的,因为我们明显能感受出物理存储空间大小的变化;而内存则更像一条“通道”,负责将数据从第一地方带到另外一个地方。比如在进行插入操作时,会先将数据读入内存,然后再通过内存写入到硬盘上达到永久的存储;又如查询操作,会先从硬盘上提取出相关的数据到内存,然后才显示到客户端。

在MySQL中,数据被分为三类:数字类型、字符串类型、日期和时间类型。需要注意的是,“日期和时间类型”是特殊的数字类型,因为它和数字一样,可以进行计算。

1. 数值类型

数值类型包括整数(无小数位)、定点数(DECIMAL)、浮点数(可以有小数位)。

在这里,我们还需要了解的是,“精确值数”和“近似值数”的区别。

(1) 组成

精确值数:整数(如,3、9)、带小数点的数(由三部分组成:一个数字序列、一个小数点、另一个数字序列。如,3.9、3.、.9)。

近似值数:采用科学计数法表示的浮点数(由三部分组成:带小数点的数、一个底数、一个指数。底数是字母e或E,指数可正可负。如,3.9e-5、-3.9e5)。

(2) 运算

精确值数在使用时与指定值是完全一致的,因此其进行的是精确运算。也就是说,只要没有超出那些数值的精度范围,就不会丢失精度。如,3.98765就不允许插入到值允许两位小数的列里。

近似值数进行的是近似运算,也就是说,会有舍入误差。

另外,还需要和“无符号”取下经。

无符号的标志是 UNSIGNED。如何使用呢?答曰:在对应的数值类型后面添加即可,记得要使用空格隔开,否则解析器理解不了。如 SMALLINT UNSIGNED、INT UNSIGNED等等。

2. 字符串类型

字符串类型包括定长、变长两种类型,比如CHAR和VARCHAR的区别就在于此。

3. 日期和时间类型

日期和时间类型包括日期与时间、时间戳、年类型。

这里需要作额外讲解的是:

① CHAR和VARCHAR两者的区别和选用。

区别:

CHAR:属于“定长”的字符串类型。什么是定长,通俗点讲就是固定长度。比如CHAR(10)就是只能存储大小为10个字节的数据,可少不可多。少则系统会自动补充空白字符。VARCHAR:属于“变长”的字符串类型。变长,即可变化的长度。比如VARCHAR(10)就是你存储的大小有多少就是多少,不会多也不会少。少的话,也无须系统帮忙填充。

选用:

(1)选用CHAR(X)较佳的情景:

当所有值的长度都是 X 个字符,那么VARCHAR(X)会比CHAR(X)多占用存储空间。因为VARCHAR需要额外使用2个字节来记录值的长度。

当使用的是MyISAM表,并且各个值的长度差别不大,那么选用CHAR更好。因为MyISAM存储引擎对固定长度行的处理效率更高。

(2)选用VARCHAR(X)较佳的场景:

当数据长短不一,选用VARCHAR类型就可以节省空格占用的存储空间了。

② 日期与时间类型中日期的表示法和写法。

表示法:

在MySQL中,时间类型的固定模式为“CCYY-MM-DD”。比如,要表示“今天”这个日期,你只能确切写为“2019-05-17”,而不能使用“05-17-2019”之类的来表示。

写法:

在插入一条记录的时候(现在不懂也没关系。后面会学习,学到后面再回来翻看一下即可),为日期列赋值时,记得要带上单引号( '  ' ),否则MySQL会报错。

比如,您可以尝试一下下面的语句,观察最后面的语句的报错信息:

CREATE TABLE interview
(interview_date DATE,
period CHAR(2),
address VARCHAR(50),
company, VARCHAR(50));INSERT INTO interview(interview_day) VALUES('2019-05-17');INSERT INTO interview(interview_day) VALUES(2019-05-17);

(二)列的一些其他属性


在创建表的时候,列的一些其他属性为可附加的。这类设置通常是对要存储的数据进行进一步的限制,比如允许为空(NULL)、禁止为空(NOT NULL)、为空时将设为默认值(DEFAULT 某个默认值)等等。具体详细请看下面。

(1)空值 NULL / NOT NULL

空值这一属性,决定了该列在插入数据时,能否为空。

(2)默认值 DEFAULT

默认值这一属性深化了“先入为主”这一概念,即在插入数据时,若给该列赋值,则采用赋予的值;否则以设置的默认值填充之。

ps:若赋予NULL值,则直接设置为默认值。即非NULL值 > 默认值 = NULL值。

(3)注释值 COMMENT '请使用其他内容代替此处文本'

注释值当然是基于开发维护用的,用于对列的描述。因此使用“DESCRIBE语句”是无法查看到它的,必须使用“SHOW CREATE TABLE 对应表名”才行。

(4)主键 PRIMARY KEY

什么是主键?主键指的是一个表里面最为主要的键。(“最”字就说明了一个表有且只有一个。既可以让一个列作为主键,也可以让两个以上列同时作为主键。“两个以上列的主键”,我们更习惯称之为“组合主键”,因为它们的结合才能起到标识记录的作用。什么是标识?请看下面)。

现在问您,表里面存储的是什么?记录?对的。前面提到过每条记录都会包含该表的所有列,既然主键作为表最主要的东东,自然是不可替代的,轻松依靠它标识每一个记录不在话下。换句话说,它就像记录的“身份证号码”。将身份证号码的性质推及到主键上,我们可以确定主键中的值一定是唯一的、不能为空的,即PRIMARY KEY = UNIQUE KEY + NOT NULL( 注意与第(5)小点区分开 )。

ps:不要将主键等同于列。否则很容易陷入“一个主键=一个列”这一傻瓜想法。主键是列的一个附加属性,仅此而已。

(5)唯一键 UNIQUE KEY

什么是唯一键?唯一键就是值唯一。

什么鬼?我不明白主键已经可以约束列值为唯一的,为什么还需要这货?因为一个表中只能有一个主键呀!如果有多处值要求唯一,那么单单依靠主键并不能解决问题。此时UNIQUE KEY就派得上用场了。这间接说明了,一个表可以有多个唯一键。

ps:NULL是可以填入UNIQUE KEY的列的,NULL值还可以有多个(why? 因为NULL不等于NULL呀!现在您明白了吗?)。

(6)自动增长序列 AUTO_INCREMENT

AUTO_INCREMENT属性的作用是:自动生成序列编号。

那么如何保证生成的序列编号“唯一”呢?让AUTO_INCREMENT与PRIMARY KEY / UNIQUE KEY相结合不就行了吗?因此,附加AUTO_INCREMENT属性的列还应设置为唯一键或主键。此外,还有一个硬性要求——一个表中只能有一个列具有ANTO_INCREMENT属性。

转载于:https://www.cnblogs.com/RajXie/p/10881841.html

从零开始学MySQL(四)相关推荐

  1. select计数语句_从零开始学 MySQL SELECT 语句详解

    阅读本文大概需要 7 分钟 前言上篇文章我们学习了 MySQL 的五种约束,今天这篇文章我们来学习下 SELECT 语句.在数据库操作语句中,使用最频繁,也被认为最重要的是 SELECT 查询语句.在 ...

  2. 从零开始学 MySQL —数据库和数据表操作

    ​前言 今天我们学习下核心的内容,学习并实践如何对数据库表和表中的内容做修改,删除,重命名等操作.(想看看周末还有多少爱学习的小伙伴,你们在哪里呀,O(∩_∩)O哈哈~) 1.目录 数据库操作:删除数 ...

  3. 从零开始学设计模式(四):工厂模式(Factory Pattern)

    作者平台: | CSDN:blog.csdn.net/qq\_4115394- | 掘金:juejin.cn/user/651387- | 知乎:www.zhihu.com/people/1024- ...

  4. mysql 新增从数据库_从零开始学 MySQL - 创建数据库并插入数据

    目录 1.实验内容 2.实验知识点 3.开发准备 4.实验总结 1.实验内容 本次课程将介绍 MySQL 新建数据库,新建表,插入数据以及基本数据类型的相关知识.本节实验将创建一个名为 mysql_s ...

  5. MySQL数据库简单入门学习教程---带你从零开始学mysql

    目录 学习教程: 接下来让我们了解一下数据库是什么? (一)什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么? 数据库: (二)安装MySQL数据库管理系统 (三)MySQL数据 ...

  6. 财务学习mysql_从零开始学 MySQL - 前言

    前言 如果真的要说程序员用得最多的语言,那应该是 SQL 吧. 不仅是前端,或是后端或多或少都要懂得写一些 SQL.甚至接触过很多业务人员,例如产品经理.运营.财务人员,也懂得写 SQL. SQL 作 ...

  7. mysql约束_从零开始学 MySQL - SQL 约束分类

    目录1.实验简介2.约束 今天我们学习一下 SQL 的约束分类. 1.实验简介 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性.本节实验将在实践操作中熟悉 MySQL ...

  8. Java从零开始学十四(包和访问控制)

    一.java中的包 Java文件的组织形式Windows中的文件功能类似 在开发比较大的项目时,不可能只涉及到一个java文件,可能要创建几十,甚至几百个java文件,这个时候,我们就可以使用包,把相 ...

  9. access 导入 txt sql语句_从零开始学习 MySQL 系列索引、视图、导入和导出

    阅读本文大概需要 8 分钟 前言上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识.作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会 ...

  10. mysql5.5从零开始_【MySQL函数】MySQL 5.5从零开始学第六章

    说明:本文总结自:<MySQL 5.5从零开始学>第六章 MySQL中的函数包括: 数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数和加密函数等. 函数: 表示对输入参数值 ...

最新文章

  1. OpenCV运动检测跟踪(blob track)框架组成模块详解
  2. 后台开发经典书籍--大话设计模式
  3. 【方案】0519冰箱运行监测系统:方案分析
  4. 22道Java面试题,看看你会了多少?
  5. 虚拟机上怎么配置mysql数据库_Linux虚拟机下安装配置MySQL
  6. 不擅演讲的马化腾在 08 年讲了什么?
  7. .Net Micro Framework 快速入门
  8. mockito mock测试框架
  9. 动点四边形周长最短_初中几何--线段之和最小值 Part 1:通过点关于直线对称点得到两定点之间直线段长度最短。...
  10. Docker学习总结(69)—— 不用 Docker 如何构建容器
  11. php的toast,Windows通知服务:401尝试在PHP中创建Toast通知时无效令牌
  12. 查看电脑硬件信息、版本、出厂、内存等各种信息
  13. 安装MiniTools后,不能识别USB的问题
  14. linux 共享文件夹 权限
  15. 一个美国人到中国当产品经理的心得:中国App设计真好!
  16. SpringMVC里拦截器preHandle里的参数意思
  17. 前后端分别部署教程 ---- 第三部分项目部署和挂载到微信公众号
  18. 红色的反色是青色引申出PS怎么反色之教程
  19. 如何给html文件夹密码,怎样给文件夹加上密码_分享两种给文件夹设密码的方法...
  20. 不从装VS6 MSDN

热门文章

  1. Python基于opencv调用摄像头获取个人图片
  2. 2021年各省高考试成绩查询,2021年各省高考成绩查询时间 什么时候出分
  3. FISCO BCOS源码(6)编译源码 获取FISCO BCOS可执行程序
  4. 【Django 2021年最新版教程32】Django 事务 悲观锁 乐观锁
  5. Kubernetes 小白学习笔记(12)--搭建一个kubernetes集群-安装dashboard和heapster并验证集群安装结果
  6. String.valueOf()方法的使用总结
  7. php如何处理耗时的任务,PHP如何在请求完毕后继续处理耗时任务
  8. 九、面向对象三大特征(三)—— 多态
  9. LayaAir graphics 矢量绘图之 多边形、矩形
  10. Spring Boot 集成 Thymeleaf 快速入门、静态资源映射规则、WebJars