从零开始学MySQL(四)
上节连接:https://www.cnblogs.com/rajxie/p/10880809.html
上节说到,在创建表的同时,需要给出列的定义。列的定义可展开如下:
列名 列的数据类型 列的一些其他属性(可选)
由于列名可自定义,故这里不做详细探讨。建议不要使用关键字或保留字即可,非要使用的话就得加上反引号了(``),唯有如此,才能让程序有效地将它们区分开。接下来,主要来学习一下列的数据类型及列的一些其他属性吧。
本文概览:
(一)列的数据类型
(二)列的一些其他属性
(一)列的数据类型
在创建表的时候,决定每一列将存储什么样类型的数据是必须的,因为这直接关系到对存储空间的占用(无论是硬盘还是内存)。
ps: 对于存储在硬盘上应该是没有什么异议的,因为我们明显能感受出物理存储空间大小的变化;而内存则更像一条“通道”,负责将数据从第一地方带到另外一个地方。比如在进行插入操作时,会先将数据读入内存,然后再通过内存写入到硬盘上达到永久的存储;又如查询操作,会先从硬盘上提取出相关的数据到内存,然后才显示到客户端。
在mysql中,数据被分为三类:数字类型、字符串类型、日期和时间类型。需要注意的是,“日期和时间类型”是特殊的数字类型,因为它和数字一样,可以进行计算。
1. 数字类型
数字类型包括整数、定点数(decimal)、浮点数。
2. 字符串类型
字符串类型包括定长、变长两种类型,比如char和varchar的区别就在于此。
3. 日期和时间类型
日期和时间类型包括日期与时间、时间戳、年类型。
ps:
原本打算自己写的,适才发现实在没有必要错过网上一些良好的资源。以上截图来自菜鸟教程,欲知更多请点击下面链接查阅:
这里需要作额外讲解的是:
① char和varchar两者的区别。
char:属于“定长”的字符串类型。什么是定长,通俗点讲就是固定长度。比如char(10)就是只能存储大小为10个字节的数据,可少不可多。少则系统会自动补充空白字符。 varchar:属于“变长”的字符串类型。变长,即可变化的长度。比如varchar(10)就是你存储的大小有多少就是多少,不会多也不会少。少的话,也无须系统帮忙填充。
② 日期与时间类型中日期的表示法。
在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属性。
推荐阅读
-
从零开始学android实现计算器功能示例分享(计算器源码)
-
跟老齐学Python之编写类之四再论继承
-
从零开始学做饭需要掌握的基本知识
-
.net(C#数据库访问) Mysql,Sql server,Sqlite,Access四种数据库的连接方式
-
详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始
-
MySQL入门(四) 数据表的数据插入、更新、删除
-
从零开始学YII2框架(六)高级应用程序模板
-
从零开始学YII2框架(二)通过 Composer 安装扩展插件
-
从零开始学YII2框架(三)扩展插件yii2-gird
-
从零开始学YII2框架(一)通过Composer安装Yii2框架