MySql数据库之表操作及基本数据类型

一.表的操作

1.创建表

create table 表名(列名1 数据类型1,列名2 数据类型2...)charset 字符集
 collate 校验规则 engine 搜索引擎;

字符集和校验规则还有搜索引擎可以不显示给出,MySql默认的是utf8字符集和utf8_general_ci字符校验规则和MyISAM搜索引擎。不同的搜索引擎,在创建表的时候文件不一样,当使用MyISAM搜索引擎的时候,会生成 下面三个文件。这里写图片描述
user.frm:存放表的结构信息,即表中各字段及其类型。
user.MYD:存放表中的数据。
user.MYI:存放表的索引。
2.查看表结构。

desc 表名;

MySql数据库之表操作及基本数据类型_第1张图片
表结构信息有各字段名称,字段类型,是否允许为空,索引类型,默认值,和扩充信息。
3.表的修改
(1)在表中添加一个的字段

alter table 表名 add 字段1 数据类型 comment‘字段描述信息’ after 已存在字段;

comment像是注释一样,我们也可以指定这个新添加的字段在那一个字段之后。
(2)修改表中某个字段属性。

alter table 表名 modify 字段名 字段类型;

(3)删除某一个字段

alter table 表名 drop 字段名;

(4)更改表名

alter table 表名 rename to 新表名;

(5)更改某个字段为新字段

alter table 表名  change 字段名 新字段名 新字段类型;

注意:在修改新字段的时候,新字段必须完整定义。
(6)更改字符集

alter table 表名 charset=指定字符集;

二.数据类型

MySql数据库之表操作及基本数据类型_第2张图片
这是MySql中所有的数据类型,下来我们一个个的进行分析。

TINYINT,SMALLINT,INT,BIGINT

MySql数据库之表操作及基本数据类型_第3张图片
这是这几种数据类型表示的范围。
我们来创建表看看。
MySql数据库之表操作及基本数据类型_第4张图片
我们创建了表b,他有一个字段num数据类型是tinyint。
我们接下来往表中插入数据。MySql数据库之表操作及基本数据类型_第5张图片
当插入2的时候,插入成功,但是插入200,一个越界数据的时候,MySql5.7会报错。
当然在MySql中,也可以进行定义无符号类型,通过unsigned字段。
MySql数据库之表操作及基本数据类型_第6张图片
这里我们把num的数据类型修改为tinyint unsigned,为什么这个时候200就可以插入成功了呢,因为,unsigned tinyint表示的返回是0到255.所以没有超过范围,其它类型同样如此。
但是定义为无符号的时候,存在问题,应该避免两个数据作减法,以为很有可能减出来一个很大的数字。所以我们应该尽量避免定义为无符号数据类型。

bite类型

bite类型又称为位类型,范围是1-64,不指定默认是1.
比如当这个字段是性别的时候,性别只有男女之分,所以我们可以设置1个bit表示这两种情况就行。
另外,bit字段在显示的时候,是使用的ASCII表的形式。

小数类型

float[(m,d)][unsigned]
m表示数据的所有位数,d表示小数占的位数,所以整数占位数就是m-d,例如float (4.2)表示的范围就是-99.99到99.99。而且Mysql在进行存储的时候,会进行四舍五入。
这里无符号小数和无符号整数的表示的范围有所不同,例如 float unsigned (4,2)表示的范围是0-99.99.
但是float在小数大于7位的时候就会造成数据精度的丢失,因此我们最好使用下面这种数据类型,decimal。
decimal和float的使,用方法是一样的,但是decimal表示的精度更为高,因此当对数据的精度要求比较高的时候,我们应该使用decimal。
decimal的整数最大位m位65,支持小数的最大位是30,默认是(0,10)。

字符串

在MySql中,默认的utf8字符集编码一个汉字占3个字节。
定常字符串:char(L)固定长度的字符串,最大255.存储空间固定。
变长字符串:varchar(L),最大长度65535个字节。
在varchar这种类型中,前三个字节记录着数据的大小,那么只剩下65532个字节用来存放数据,又说一个汉字3个字节,所以65532/3=21844,所以L的长度最大是21844.
为什么存在着两种字符串类型呢?
因为他们之间的存储空间和查找效率各有优点,char类型一旦定义出来,不管插入数据的大小是多少,都按照定常存储,而varchar会根据插入数据的长度,计算存储长度,相比char更节省空间,但是查找起来效率低,而char类型的搜索效率高

时间类型

datatime:’yyy-mmm-dd hh:ii:ss‘ 表示范围从1000-9999,占八字节。
data:日期’yyy-mmm-dd‘,占用三个字节
timestamp:时间戳,从1970年开始的和datatime数据类型相同的数据类型,在每次修改和删除数据的时候,系统会自动维护修改这个数据。

枚举和set

enum:枚举
在c语言中,我们也有枚举类型,MySql中枚举类型跟它差不多。
enum(’‘选项1’,‘选项2’,’选项3‘…);
处于效率考虑,实际存储的都是“数字”,从1开始,一直到65535.
当我们插入枚举类型的时候,也可以添加对应的数字编号。
set:集合
set(‘选项1’,‘选项2’,‘选项3’…);
枚举就好像提供了一个选项,而set像是提供了多个选项。同样为了效率,也是存储的是“数字”

  • 在set中查询的时候,我们不能使用=,要使用find_in_set,
  • 例如 select *from 表明 where find_in_set(‘登山’,hobby);

你可能感兴趣的:(MySql)