第二章 表的操作
- 一、表的创建
- (1)语法
- (2)示例
- 二、查看库中所有表以及具体表结构
- (1)语法
- (2)示例
- 三、表的修改
- (1)语法
- (2)示例
- 四、表的删除
- (1)语法
- (2)示例
- 五、数据类型
- 1、数据类型分类
- 2、数值类型
- (1)整数类型
- (2)位字段:bit类型
- 基本语法:
- 显示规则:
- (3)小数类型
- a. float 类型
- 语法
- 示例
- b. decimal 类型
- 语法:
- decimal和float的区别:
- 3、字符串类型
- (1)char
- 语法
- (2)varchar
- 语法:
- 关于varchar存储字符个数的讨论
- char与varchar的比较
- 如何选择定长或变长字符串?
- 4、日期和时间类型
- (1)date
- (2)datetime
- (3)timestamp
- 三种日期时间的示例
- 5、enum和set
- (1)enum单选类型
- 语法
- (2)set多选类型
一、表的创建
(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的表,并且用两种方式向表格中插入数据,最终的效果如下图所示。