数据库基本使用(下)

数据库基本使用(下)

概要

  • 存储引擎

  • 创建表的完整语法

  • 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的组合唯一
posted @ 2021-09-04 18:46  Leguan001  阅读(41)  评论(0)    收藏  举报