从零开始学MySQL(四)
上节连接: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(四)相关推荐
- select计数语句_从零开始学 MySQL SELECT 语句详解
阅读本文大概需要 7 分钟 前言上篇文章我们学习了 MySQL 的五种约束,今天这篇文章我们来学习下 SELECT 语句.在数据库操作语句中,使用最频繁,也被认为最重要的是 SELECT 查询语句.在 ...
- 从零开始学 MySQL —数据库和数据表操作
前言 今天我们学习下核心的内容,学习并实践如何对数据库表和表中的内容做修改,删除,重命名等操作.(想看看周末还有多少爱学习的小伙伴,你们在哪里呀,O(∩_∩)O哈哈~) 1.目录 数据库操作:删除数 ...
- 从零开始学设计模式(四):工厂模式(Factory Pattern)
作者平台: | CSDN:blog.csdn.net/qq\_4115394- | 掘金:juejin.cn/user/651387- | 知乎:www.zhihu.com/people/1024- ...
- mysql 新增从数据库_从零开始学 MySQL - 创建数据库并插入数据
目录 1.实验内容 2.实验知识点 3.开发准备 4.实验总结 1.实验内容 本次课程将介绍 MySQL 新建数据库,新建表,插入数据以及基本数据类型的相关知识.本节实验将创建一个名为 mysql_s ...
- MySQL数据库简单入门学习教程---带你从零开始学mysql
目录 学习教程: 接下来让我们了解一下数据库是什么? (一)什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么? 数据库: (二)安装MySQL数据库管理系统 (三)MySQL数据 ...
- 财务学习mysql_从零开始学 MySQL - 前言
前言 如果真的要说程序员用得最多的语言,那应该是 SQL 吧. 不仅是前端,或是后端或多或少都要懂得写一些 SQL.甚至接触过很多业务人员,例如产品经理.运营.财务人员,也懂得写 SQL. SQL 作 ...
- mysql约束_从零开始学 MySQL - SQL 约束分类
目录1.实验简介2.约束 今天我们学习一下 SQL 的约束分类. 1.实验简介 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性.本节实验将在实践操作中熟悉 MySQL ...
- Java从零开始学十四(包和访问控制)
一.java中的包 Java文件的组织形式Windows中的文件功能类似 在开发比较大的项目时,不可能只涉及到一个java文件,可能要创建几十,甚至几百个java文件,这个时候,我们就可以使用包,把相 ...
- access 导入 txt sql语句_从零开始学习 MySQL 系列索引、视图、导入和导出
阅读本文大概需要 8 分钟 前言上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识.作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会 ...
- mysql5.5从零开始_【MySQL函数】MySQL 5.5从零开始学第六章
说明:本文总结自:<MySQL 5.5从零开始学>第六章 MySQL中的函数包括: 数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数和加密函数等. 函数: 表示对输入参数值 ...
最新文章
- OpenCV运动检测跟踪(blob track)框架组成模块详解
- 后台开发经典书籍--大话设计模式
- 【方案】0519冰箱运行监测系统:方案分析
- 22道Java面试题,看看你会了多少?
- 虚拟机上怎么配置mysql数据库_Linux虚拟机下安装配置MySQL
- 不擅演讲的马化腾在 08 年讲了什么?
- .Net Micro Framework 快速入门
- mockito mock测试框架
- 动点四边形周长最短_初中几何--线段之和最小值 Part 1:通过点关于直线对称点得到两定点之间直线段长度最短。...
- Docker学习总结(69)—— 不用 Docker 如何构建容器
- php的toast,Windows通知服务:401尝试在PHP中创建Toast通知时无效令牌
- 查看电脑硬件信息、版本、出厂、内存等各种信息
- 安装MiniTools后,不能识别USB的问题
- linux 共享文件夹 权限
- 一个美国人到中国当产品经理的心得:中国App设计真好!
- SpringMVC里拦截器preHandle里的参数意思
- 前后端分别部署教程 ---- 第三部分项目部署和挂载到微信公众号
- 红色的反色是青色引申出PS怎么反色之教程
- 如何给html文件夹密码,怎样给文件夹加上密码_分享两种给文件夹设密码的方法...
- 不从装VS6 MSDN
热门文章
- Python基于opencv调用摄像头获取个人图片
- 2021年各省高考试成绩查询,2021年各省高考成绩查询时间 什么时候出分
- FISCO BCOS源码(6)编译源码 获取FISCO BCOS可执行程序
- 【Django 2021年最新版教程32】Django 事务 悲观锁 乐观锁
- Kubernetes 小白学习笔记(12)--搭建一个kubernetes集群-安装dashboard和heapster并验证集群安装结果
- String.valueOf()方法的使用总结
- php如何处理耗时的任务,PHP如何在请求完毕后继续处理耗时任务
- 九、面向对象三大特征(三)—— 多态
- LayaAir graphics 矢量绘图之 多边形、矩形
- Spring Boot 集成 Thymeleaf 快速入门、静态资源映射规则、WebJars