数据库存储引擎,创建表的完整语句以及数据类型
一:数据库存储和引擎
引擎:指的是一个功能的核心部分,而数据库的核心就是存储数据,所以涉及到存储数据的代码,
称之为存储引擎。
根据不同的需求,需求场景的不同,也有着不同的引擎分类:
如:innodb,csv,blackhole,memory ……
其中innodb是默认的引擎,因为它是永久存储,并且支持事务,行锁,外键。
二:创建表的完整语
格式:create table 表名 (字段名称 数据类型[(长度) 约束条件],
字段名称 数据类型[(长度) 约束条件])
必须的:字段名称,数据类型,表名
注意:字段名称,类名,库名都不能是mysql的关键字
可选的:长度,约束条件
其中长度用于设置数据的长度,约束指的是为数据设置的规范。
如果添加的数据超过了指定的长度范围,超出范围的部分就会被丢弃。
三:数据类型
1:为什么要将数据分类?
①:为了描述事物更加准确
②:描述起来更方便
③:节省内存空间
2:mysql里支持的数据类型
①:整型
②:浮点型
③:字符串型
④:时间日期型
⑤:集合和枚举
①:整型
分类:tinyint smallint mediumint int bigint
字节数: 1 2 3 4 8
默认情况下整型是有符号的,需要用一个二进制位存储符号,如果要改成无符号的,可以通过
给整型加上约束unsigned来表示无符号。如果数据超出范围,就尽可能保存最大的。
以上特性的出现是因为mysql处于非严格模式,
如何查看当前模式: show variables like "sql_mode";
如何修改为严格模式 set global sql_mode = "STRICT_TRANS_TABLES";
在严格模式下,如果值超出范围就会直接报错,在一些版本中默认就是严格模式。
在我们的正常开发中,我们应该先判断数据的正确性,没有问题再发给数据库。
长度限制对于整型的意义:这里长度指的不是存储容量限制,而是显示的宽度,
如果数据超过了显示宽度,那就会有几个显示几个。如果不足,则补全到指定长度,
可以通过zerofill在创建表时约束,用0来补全。
②:浮点型(小数型)
分类:float double decimal
字节数: 4 8 不确定(手动指定)
相同点:小数部分最大长度都是30
float和double的最大长度为255
不同点:decimal的整体最大长度65
精度不同:double 比 float 精度高,decimal 是准确的,不会丢失精度。
给浮点型设置宽度限制:
语法:
float(m,d)
double(m,d)
decimal(m,d)
其中 m 表示这个浮点数整体的长度,d 表示小数部分的长度。
例:float(5,3) 最大值: 99.999
③:字符串型
分类:char 定长字符 varchar 变长字符
char类型的长度是固定的,无论你存储的数据有多长,占用的容量都一样。
例:char(3) 存储的数据为 "a" 在硬盘保存的数据还是占3字符长度,实际保存的是"a "
varchar类型的长度是可变的,存储的数据有多长就占用多长。
例:varchar(3) 存储的数据为 "a" 在硬盘保存的数据是占1字符长度,实际保存的是"a"
总结:
char 存取效率高,但是浪费存储空间。
varchar 存取效率低于char,但是节省存储空间。
④:时间日期型
分类:
time 时分秒 HH:MM:SS
year 年份
date 日期 年月日
datetime 日期加时间 年月日 时分秒
timestamp 时间戳
相同点:时间的存取都是通过字符串类型,都可以使用now()函数来插入当前时间。
⑤:集合和枚举类型
a:枚举:用于描述一个已知范围的数据,例如性别:只有男,女或其他
通过使用关键字 enum 来定义枚举
例:enum("male","female","other")
总结:枚举中的数据只能是字符串类型,添加的数据只能是已经出现在枚举中的值,而且
值只能是其中的一个,同时可以使用枚举值的序号来插入值,从1开始。特点:多选一
b:集合:用于描述一堆数据 ,比如:兴趣爱好
通过使用关键字 set 来定义集合
例:set("watch movie","listen music","play game")
总结:集合中的数据只能是字符串类型,添加的数据只能是已经出现在集合中的值,而且
值可以是其中的任意几个,同时可以使用集合的序号来插入值,从1开始,但是只能给一个
序号。特点:多选多