欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

从零开始学MySQL(四)

程序员文章站 2024-01-22 15:54:28
上节连接:https://www.cnblogs.com/RajXie/p/10880809.html 上节说到,在创建表的同时,需要给出列的定义。列的定义可展开如下: 由于列名可自定义,故这里不做详细探讨。建议不要使用关键字或保留字即可,非要使用的话就得加上反引号了(``),唯有如此,才能让程序有 ......

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

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

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

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

本文概览:

(一)列的数据类型

(二)列的一些其他属性

 

(一)列的数据类型


 

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

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

 

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

 

1. 数字类型

数字类型包括整数、定点数(decimal)、浮点数。

从零开始学MySQL(四)

 

 

2. 字符串类型

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

 从零开始学MySQL(四)

 

 

3. 日期和时间类型

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

从零开始学MySQL(四)

 

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属性。