欢迎投稿

今日深度:

从零开始学MySQL(四),

从零开始学MySQL(四),


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

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

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

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

本文概览:

(一)列的数据类型

(二)列的一些其他属性

 

(一)列的数据类型


 

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

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

 

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

 

1. 数字类型

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

 

 

2. 字符串类型

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

 

 

 

3. 日期和时间类型

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

 

ps:

原本打算自己写的,适才发现实在没有必要错过网上一些良好的资源。以上截图来自菜鸟教程,欲知更多请点击下面链接查阅:https://www.runoob.com/mysql/mysql-data-types.html

 

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

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

www.htsjk.Com true http://www.htsjk.com/Mysql/24873.html NewsArticle 从零开始学MySQL(四), 上节连接:https://www.cnblogs.com/RajXie/p/10880809.html 上节说到,在创建表的同时,需要给出列的定义。列的定义可展开如下: 列名 列的数据类型 列的一些其他属性(可...
相关文章
    暂无相关文章
评论暂时关闭