数据类型:
数值类型:
bit (M) :位类型,M是指位数,如果不指定默认为1,M的取值范围1~64
注:bit在表示的时候是按照ASCII对应的符号来表示的,如果指向让值为1或者0,M不需要指定或者指定为1
bool :布尔值类型用1和0表示真假
默认为有符号,无符号在后面指定为unsigned
tinyint:有符号表示范围-128~127,无符号范围0~255,
smallint:有符号范围-2^15~2^15-1,无符号范围0~2^16
int:有符号范围-2^32~2^32-1,无符号范围0~2^32-1;
bigint:有符号范围-2^63~2^63-1,无符号范围0~2^64
MySQL存储数据默认四舍五入
float(M,D):M表示数值长度(仅包含数字),D表示小数位数
double(M,D):M表示数值长度(仅包含数字),D表示小数位数
decimal(M,D):M表示数值长度(仅包含数字),D表示小数位数
float表示的精度大约是7位
decimal支持整数位的最大位数为65,小数位数最大可以取值为30;如果不指定m,默认为10,不指定D,默认为0
相较于float,decimal的精度更高一些
字符类型:
char(size) :固定长度,最大取值为255
varchar(size):可变长度字符串,最大长度为65535
size的大小:
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是 65532。
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字 节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。
故size的大小和表的字符集有关
日期和时间类型:
datetime:时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从1000到9999,占用八字节
date:日期 'yyyy-mm-dd',占用三字节
timestamp:时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用四字节
插入数据、或更新数据,时间戳会更新为当前系统的时间
enum和set类型:
enum:枚举,即相当于“单选”;
该类型提供了若干个选项的值,在每个格中,实际上只存储其中一个值。选项的每个选项值依次对应数字1,2,3.......最多65535个;添加值时,我们既可以添加枚举值,也可以添加对应的数字。
set:集合,即相当于“多选”;
该类型提供了若干个选项的值,在每个格中,可存储其中任意几个值。这些选项的每个选项值也依次对应数字1,2,4,8......最多64个。添加值时,我们既可以添加值,也可以添加对应的数字。
集合中查询使用find_in_set函数
创建数据表
命令:create table [表名称] ([列名称] [列的数据类型] comment [解释] )charset = [字符集] collate [校对规则] engine=[存储引擎]
查看表结构
命令:desc [表名称]
show create table [表名称]
我们使用desc命令,看不到列描述;
而show create table 命令可以看到:
相关的修改操作
字段操作
新增表字段:
alter table [表名称] add [列名称] [列的数据类型] after [列名称(在该列之后添加字段)]
新增字段不会影响之前的数据,但是新增的字段为空
我们存有一张学生信息的表格,初始信息有姓名,学号;但是我们打算现在新增了一个校区,需要新增加信息,学生所在的校区
修改字段的数据类型:
alter table [表名称] modify [列名称] [修改之后的列类型]
删除字段:
alter table [表名称] drop [列名称]
注:删除该字段之后,该字段的数据也全部被删除
字段的重命名:
alter table [表名称] change [列名称] [修改之后的列名称] [列的数据类型]
我们现在的学生信息中有一个表示是否是男生,一开始我们使用一个比特位标识,现在呢?我们想改为用int表示
现在我们相修改学生信息表,因为用是否是男生表示性别,对女生不太尊重,所以我们现在将man这列该为sex,且存储男生或女生的字符串,方便看
现在,我们新建一个校区的愿望被搁浅了,我们在学生信息中,这列也就不需要了,请删除
表的重命名
命令:
alter table [表名称] rename to [修改之后的表名称] 或 alter table [表名称] rename [修改之后的表名称]
对表中数据的操作命令
插入数据:
全列数据的插入:insert into [表名称] values (每列对应的值,用 “,” 隔开,需要按照列的先后顺序排列数据)
单列数据的插入:insert into [表名称] [列名称] values (数据)
查询数据:
全列数据的查询: select * from [表名称]
指定列查询:select [列名称] from [表名称]
注:列名称若有多个的时候,需要用逗号隔开
更加详细的关于表的操作会在第三弹进行展开;
删除表
drop table [表名称]
备份表:
备份表的命令:mysqldump -P3306 -u [用户名] -p[密码] [库名称] [表名称] > 数据库文件的保存路径 (文件后缀为.sql
备份表的还原:source 数据库文件的保存路径 (文件后缀为.sql
总结:
表的操作:
创建表:create table [表名称] ([列名称] [列的数据类型] comment [解释]) charset=[字符集] collate [校对规则] engine=[存储引擎]
查看表结构:
desc [表名称] 不可以看到列名称的解释
show create table [表名称] 可以看到列名称的解释
查看数据库中的所有表: show tables
修改表名称:alter table [表名称] rename to [修改之后的表名称] 或者 alter table [表名称] rename [修改之后的表名称]
删除表:drop table [表名称]
表的备份及其还原:
备份:mysqldump -P3306 -u [用户名] -p[密码] [库名称] [表名称] >数据库文件的存储路径;文件后缀为.sql
还原:source 数据库文件的存储路径;文件后缀为.sql
表字段的操作
添加列: alter table [表名称] add [列名称] [列的数据类型] after [列名称]
修改列的数据类型: alter table [表名称] modify [列名称] [列名称的数据类型]
删除列:alter table [表名称] drop [列名称]
修改列的名称:alter table [表名称] change [列名称] [修改之后的列名称] [列的数据类型]
注:如果本篇博客有任何错误和建议,欢迎伙伴们留言,你快说句话啊!