第二章 表的操作与数据类型

一、表的创建

(1)语法

create table 表的名称(
名称1 数据类型1,
名称2 数据类型2,
名称3 数据类型3,
....
名称n 数据类型n
)character set 字符集 collate 校验规则 engine 存储引擎;

我们创建的表都是在某一个库下面的,所以在进行创建表的操作之前,我们需要先用use 数据库名称;这一语句进入目标库。

最后的字符集,校验规则,存储引擎也可以不进行设置,如果不设置的话,该表的这些属性将与表所在的库保持一致。

(2)示例

在这里插入图片描述

二、查看库中所有表以及具体表结构

(1)语法

查看所有表:

show tables;

查看具体某个表的结构:

desc 表的名称;

(2)示例

在这里插入图片描述

三、表的修改

(1)语法

在表中插入一个新的变量。

alter table 表的名称 add 变量名称 数据类型;

在表中修改某个变量的属性

alter table 表的名称 modify 变量名称 数据类型;

删除表中的某一个变量

alter table 表的名称 drop 变量名称;

修改表的名称

alter table 表的名称 rename to 新名称;

(2)示例

在T1的表中添加一个名为age的新变量。
在这里插入图片描述
将T1表中name的数据类型改为varchar(30)。
在这里插入图片描述
删除T1表中的age变量。
在这里插入图片描述
将刚刚的T1表的名称修改为TTT。
在这里插入图片描述

四、表的删除

(1)语法

drop table 表的名称;

(2)示例

删除名为TTT的表。
在这里插入图片描述

五、数据类型

通过上面的讲解,我们发现这些语句是比较简单的,但是最让我们感到困惑的其实是这些变量的数据类型。因此,作者将为大家讲解一下mysql数据库中常见的数据类型。

1、数据类型分类

在这里插入图片描述

2、数值类型

(1)整数类型

数值类型与我们在c/c++中学习的int是很类似的,大家只需要根据数据范围合理选择即可。
在这里插入图片描述

(2)位字段:bit类型

基本语法:

bit(m)

bit类型是是一个位字段类型,位数的长度范围是从1到64,如果在使用bit的时候,我们没有规定位的长度则默认长度为1,即1位。

显示规则:

当我们给bit类型的变量赋值的时候 ,bit字段并不会直接显示该数字,而是在ASCII码中找到对应的字符打印出来。

如果我们有这样的值,只存放0或1,这时可以定义bit(1)。这样可以节省空间。

如下图所示:

在这里插入图片描述
我们插入了一个10,但是并没有显示,但是我们插入一个65,根据ASCII码表,65代表的是字符A,因此,打印出了一个A。

(3)小数类型

a. float 类型

float是小数类型,占用空间四个字节。

语法
float(m,d) m指的是显示长度,d是小数部分的位数。
float(m,d) unsigned 指的是无符号小数。

注意:mysql在保存小数的时候,多余的位数会根据四舍五入规则进行取舍。

示例

假如我们定义:float(4, 2),那么这个变量的取值范围则是:-99.99 ~ 99.99

比如我们创建一个表,其中只包含一个float(4,2)类型。如下图:
在这里插入图片描述
现在我们向这个表中插入三个数据,这三个数据分别是:89.99、89.993、89.999。
在这里插入图片描述
我们发现,根据我们小数位数的设定,mysql对我们的数据做了四舍五入的处理。

假设我们插入一个大于数据范围的数字呢?
在这里插入图片描述
此时mysql会出现报错,mysql会提示我们,我们插入的数据超出了预定的范围。

b. decimal 类型

语法:
decimal(m,d)  指定长度为m,小数位数为d的浮点数。
decimal(m, d) unsigned 指的是无符号小数。
decimal和float的区别:

float与decimal表示的精度是不一样的。float表示的精度大约是7位,decimal整数最大位数m为65位,支持小数最大位数d是30位。如果d被忽略,默认为0。如果m被省略,则默认是10。如果希望小数的精度高,推荐使用decimal。

我们可以通过下面的示例来证明二者的精度问题。
在这里插入图片描述
我们发现,我们向float和decimal类型变量中,同时插入数据:23.12345612。
当我们查看数据的时候,我们发现float类型的a1在存储这个数据的时候,数据发生了错误。

3、字符串类型

(1)char

语法

char(l)   :固定长度的字符串,L是该字符串可以存储的字符数量。最多能够存储255个字符。

比如:
char(2),这个变量表示可以存放两个字符,字符可以是汉字也可以是字母。
在这里插入图片描述

(2)varchar

语法:

varchar(L):可变长度字符串,L表示字符个数,最大长度为65535字节(这里的单位是字节,不是字符)。

关于varchar存储字符个数的讨论

varchar(len),这个len到底是多大,其实是与表的编码密切相关的。varchar变量中会用1~3个字节来记录数据大小,所以说varchar的有效字节数是65532。
当我们表的编码是utf8的时候,一个字符占用3个字节,因此Len = (65532 / 3)= 21844。如果编码是gbk的话,因此len=65532/2=32766。

char与varchar的比较

在这里插入图片描述

如何选择定长或变长字符串?

  • 如果数据确定长度都一样,就使用定长。
  • 如果数据的长度是有变化的,就使用变长的。
  • 定长的磁盘空间比较浪费,但是效率高。
  • 变长的磁盘空间比较节省,但是效率低。

4、日期和时间类型

(1)date

date表示日期,日期表示的形式为:yyyy-mm-dd,共占用三个字节。

(2)datetime

datetime表示的是时间+日期,表示的格式为:yyyy-mm-dd HH:ii:ss,占用八个字节。

(3)timestamp

时间戳,从1970年开始,其表示格式与datetime完全一致,占用四个字节。

三种日期时间的示例

我们先创建一个名称为T2的表,该表中有三个变量,分别为t1,t2,t3。三个变量的类型分别为:date,datetime,timestamp。
在这里插入图片描述
现在我们开始向里面插入数据,这里我们只插入t1和t2。
在这里插入图片描述
现在我们看一下表中的数据。
在这里插入图片描述
我们发现t1和t2所表示的数据就是我们插入的,但是我们并没有插入t3的时间。但在表格中出现了t3的数据。这个数据其实作者现在写这篇文章的时间,即我们插入这个数据的时间。

由此,我们就可以发现,时间戳会自动填充上我们插入或修改某行数据的时间。

5、enum和set

(1)enum单选类型

enum是一个单选类型,那么什么是单选类型呢?

比如说我们现在想让用户填写性别,那么对于性别而言,无非就是男生或者女生,二选一即可。那么此时我们可以提供选项,让用户直接选择。

该类型的好处在于,约束用户的输入同时节约空间。当我们用enum设置好选项后,如果用户输入了选项之外的数据内容,mysql会发生报错。因此,使用enum可以约束用户的输入,保证数据的合理性。

此外,当我们设置了选项后,mysql在存储的时候不会存储选项内容,而是存储该选项的标号。这样就能够用一个字符代替一个很长的选项,从而达到了节约空间的目的。

语法

enum('选项1','选项2,'选项3'....)

比如我们创建一个名称为T4的表,表中存储的是enum类型的变量。同时我们插入两组数据。
在这里插入图片描述
如上图所示,我们插入了两组数据,一组数据插入的选项内容,一组数据插入的是选项编号。最终都能成功插入,数据内容如下。
在这里插入图片描述

(2)set多选类型

set是一个多选数据类型,即用户可以在选项中选择多个。那么在插入数据的时候同样有两种插入方式。一种是按照数据内容拆入。另外一种方式是二进制的方式插入。比如我们插入一个3,3的二进制011,即我们选择第一个和第二个选项。

set('选项1','选项2,'选项3'....)

我们同样创建一个只有set的表,并且用两种方式向表格中插入数据,最终的效果如下图所示。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_72060925/article/details/131741254