数据库基本使用(下)
概要
-
存储引擎
-
创建表的完整语法
-
MySQL基本数据类型
-
字段的约束条件
详情
-
存储引擎
存储引擎是数据库内部针对数据的方式,有很多种。
查看存储引擎
show engines;

主要的存储引擎
1.InnoDB # MySQL5.5以后的版本默认的存储引擎 支出事务、外键、行锁等功能 故数据安全性高 2.MyISAM # MySQL5.5以前的版本默认的存储引擎 不支持事务、外键等功能 故安全性较低,不过存取速度快于InnoDB 3.MEMORY 数据直接存储在内存中 故存取速度很快,不过数据在断电立即丢失 4.BLACKHOLE 写入其中的数据都会丢失
初步比较不同引擎的特点
1.用不同的存储引擎创建四张可供测试的表
create table test_engine_1(id int)engine=InnoDB; create table test_engine_2(id int)engine=MyISAM; create table test_engine_3(id int)engine=MEMORY; create table test_engine_4(id int)engine=BLACKHOLE;

2.如上图可以看到使用的存储引擎不同,其生成的文件数据也不相同
(1) InnoDB >>> 2 .frm # 表结构 .idb # 表数据、表索引用同一个文件存储 (2) MyISAM >>> 3 .frm # 表结构 .MYD # 表数据 单独一个文件 .MYI # 表索引 单独一个文件 (3) MEMORY >>> 1 .frm # 数据存放于内存,故只有表结构 (4) BLACKHOLE >>>1 .frm # 不存储数据,故只有表结构

3.查看存储数据特性,这里先各自插入一条记录 insert into test_engine_1 values(1); insert into test_engine_2 values(2); insert into test_engine_3 values(3); insert into test_engine_4 values(4);

select * from test_engine_3; # 关闭服务后查询结果空,数据丢失 select * from test_engine_4; # 查询结果空,数据丢失
![]()

-
创建表的完整语法
1.创建表的时候,必须要定义字段名和字段类型,宽度和约束条件可以省略 2.同一个字段可以没有或有一个或多个约束条件 3.最后字段定义结尾不能有逗号 create table 表名( 字段名1 字段类型(宽度) 约束条件, 字段名2 字段类型(宽度) 约束条件, 字段名3 字段类型(宽度) 约束条件 ) eg: create table Student_02( id tinyint(2) unsigned not null, name varchar(16) not null, age tinyint(2) not null );

-
MySQL基本数据类型
1、整型
整数类型 范围(若有符号则减少一个二进制位即可) tinyint 0 ~ 255 smallint -2^15 ~ 2^15-1 int -2^31 ~ 2^31-1 bigint -2^63 ~ 2^63-1
整型是否自带符号
create table test_int(id tinyint); insert into test_int values(-100),(252); """其他整型同样默认自带符号""" create table test_int_2(id tinyint unsigned); # unsigned 约束条件 限制该字段无符号 insert into test_int_2 values(-100),(252);

2、浮点型
浮点型有三种,float、double、decimal。
不同类型的浮点型存储小数的大小范围及精度都不同 float # 总共255位 小数占30位 double # 总共255位 小数占30位 decimal # 总共65位 小数占30位 eg: create table test_float(id float(255,30)); create table test_double(id double(255,30)); create table test_decimal(id decimal(65,30)); # 插入小数位较多的小数 insert into test_float values(888.8888888888888888888888); insert into test_double values(888.8888888888888888888888); insert into test_decimal values(888.8888888888888888888888); # 精度对比 由下图可知,三种浮点型的精度比较:float < double < decimal

3、字符型
字符型分为char和varchar。
# 存储数据时两者有显著差别 char(n) 最多可以存储n个字符,超出就报错,未超出也按照四个字符存储 varchar(n) 最多可以存储n个字符,超出就报错,未超出按实际字符数存储 eg: create table test_char(id int,name char(4)); create table test_varchar(id int,name varchar(4)); insert into test_char values(1,'Leoric'); insert into test_varchar values(1,'Leoric'); # 由于5.6有优化机制,超出范围不会报错,故这里需要开启严格模式>>>5.7及之后版本默认开启严格模式

#严格模式 查看严格模式:show variables like '%mode%'; 设置严格模式: set global sql_mode='strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH';# 之后推出客户端重新进入即可

char_length():获取括号内字符串长度 """char与varchar比较""" char 整存整取,存取速度快,较浪费存储空间 varchar 节省存储空间,存取速度慢 ''' char直接按照指定的大小存储,不足则填充空格 varchar存放字符串时会先在前端存放其长度,读取的时候按照长度读取,故计算量较大 ''' 默认情况下MySQL会自动填充存储并在查询的时候自动去除填充的空格 两种存储方式各有优劣
4、时间类型
常用时间类型 date # 年月日 time # 时分秒 datetime # 年月日时分秒 Year # 年 eg: create table test_time( id int, born_year year, birth date, birth_time time, test_time datetime ); insert into test_time values(1,'2021','2021-09-10','00:00:00','2011-11-11 11:11:11');

5、枚举与集合类型
1、枚举
enum 多选一 eg: create table test_enum( id int, name varchar(16), gender enum('male','female') ); insert into test_enum values(1,'Leoric','male'); insert into test_enum values(1,'Leoric','男'); # 报错 '''枚举类型只能插入提前定义好的一个值,否则报错'''

2、集合
set 多选多(或一) eg: create table test_set( id int, name varchar(16), game set('LOL','DOTA','PUBG') ); insert into test_set values(1,'Leoric','LOL'); insert into test_set values(2,'Leo','LOL,DOTA'); insert into test_set values(3,'Ace','剑灵'); # 报错 '''集合类型只能插入提前定义好的一个或多个值,否则报错'''

-
字段的约束条件
''' 宽度不限制数字类型的存储长度,只用来表示其展示长度。 故定义数字时无需手动添加宽度。 '''
插入记录两种方式
1.insert into t1 values() 按照字段顺序依次传入 (类似于位置参数,一个都不能少) 2.insert into t1(id,name) values() 按照指定的字段传入(类似于关键字参数,可以少)
约束条件
无符号 : unsigned 0填充 : zerofill 不能为空: not null # 使用频率高 默认值 : default 唯一 : unique 多列唯一: unique(字段1,字段2) # 限制字段1和2的组合唯一



浙公网安备 33010602011771号