MySql教程

mysql的存储

本文主要是介绍mysql的存储,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

MySQL的存储引擎,数据类型的实际操作

  • 存储引擎
  • 创建表的完整语法
  • 数据类型
  • 字段的约束条件
mysql对字母大小写不敏感

 

存储引擎

什么是存储引擎

MySQL内部针对数据的存储有不同的方式
数据库的存储方式就是存储引擎

查看搜索引擎

show engines;

主要存储引擎

innoDB
    MySQL5.5之后的版本默认的存储引擎
    特点:
    支持事务、行锁、外键
    安全性高
'''
事务:用于保证多个数据的操作能全部完成或失败
行锁:在每行的同一时间,只能有一个人操作
外键:建立表与表之间的关系
'''
myisam
    MySQL5.5之前版本默认的存储引擎
    特点:
    不支持事务、外键等功能 
    安全性比innoDB低
    存取速度比innoDB快

memory:
    数据直接存储在内存
    特点:
    速度快
    断电立刻丢失
    
blackhole:
    性能如其名,写入的数据会丢失

存储引擎表文件

语法:
create table 表名(id int,内容 类型)engine=innoDB;

 不同存储引擎的文件数目也不同

innoDB:
    .frm 表结构
    .idb  表数据、索引(类似于目录)  
myisam:
    .frm 表结构
    .myd 表数据
    .myi 表索引
memory:
    .frm 表结构
blackhole:
    .frm 表结构

存储数据特性

innorDB:
insert into r1 values(1);

myisam:
    insert into r2 values(1);

blackhole:
    insert into r4 values(1);

memory:
    insert into r3 values(1);

但是重启之后

 

创建表的完整语法

语法:
    create table 表名(
    字段名 数据类型(宽度)约束条件,
    字段名 数据类型(宽度)约束条件
);
'''
1.字段名和数据类型是必须的,宽度和约束条件可选
2.约束条件可选,且一个字段可以有多个约束条件
3.最后结尾字段语句不能有逗号
'''

 

数据类型

整形

tinyint
smallint
int
bigint
'''不同整形存储的数字范围不同'''

 

验证整型是否自带正负号

# 其他数据类型也默认自带正负号

浮点型

float
double
decimal
'''不同的浮点型小数范围不同和精度不一样'''
float(255,30)  # 占255位,小数占30位
double(255,30) # 占255位,小数占30位
decimal(65,30) # 占65位,小数占30位

create table r6(id float(255,30));
create table r7(id double(255,30));
create table r8(id decimal(65,30));
insert into r8 values(1.11111111111111111);
insert into r7 values(1.11111111111111111);
insert into r6 values(1.11111111111111111);

# 精确度:float< double < decimal

字符型

char
varchar

char(x):
    最多可以存储x个字符,在严格模式下,操过了报错,没有超过时默认空格填充空余
varchar(x):
    最多可以存储x个字符,超过报错,没有超过时不用空格填充空余

eg:
create table r9(id int,name char(4));
create table r10(id int ,name varchar(4));
insert into r9 values(1,'jjjjj');  # 改版为5.6,因在5.7版本之前没有开启严格模式,所以没有报错

# char_length()
默认情况下char会自动填充存储并在查询的时候自动去除空格
eg:
    insert into r9 values(1,'g');
    insert into r10 values(1,'g');
    # 设置严格模式(需要重启客户端)
    set gloabl sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";

思考
char:
    优点:存取速度快
    缺点:浪费存储空间
varchar:
    优点:节省存储空间
    缺点:存取速度慢
# varchar在存储数据时,会空出一字节计算字符长度没所以慢
'''
结论:两者各有相应的使用场合,要取长补短
'''

补充:严格模式

# 查看严格模式
    show variables like '%mode%';

# 修改严格模式(需要退出客户端重新登录生效)
set global sql_mode = 'strict_trans_tables';

 时间类型

date  年以日
time 时分秒
Datatime  年月日时分秒
year 年
# 针对时间的数据一般为自动获取

eg:
create table people(
    id int,
    name char(16),
    born year,
    birth date,
    study time,
    reg_time datetime
);

insert into student values(1,'jjj','1980','1980-1-12','2:4:0','1980-1-12 2:4:0');

 枚举与集合类型

enum
    多选一

# 枚举类型
create table en1(
    id int,
    name varchar(16),
    gender enum('male','female','other')
);
# 插入数据的时候只能够插入提前规定好的
insert into t13 values(1,'jj','animals');  # 报错

set
    多选多(包含多选一)

# 集合类型
create table s1(
    id int,
    name char(16),
    hobby set('basketball','football','doublecolorball')
);
    insert into s1 values(1,'jj','play');  # 报错

insert into s1 values(1,'jj','baseball'),(2,'zz','baseball,football');

 宽度说明

int(x)  char(x)
# 针对数字类型 宽度并不是用来限制存储长度而是用来表示展示长度
'''
以后在定义数字,不需手动添加宽度
'''

 

约束条件

'''
插入数据两种方式:
    # 按照字段顺序依次传入(一个都不能少)
    1.insert into 表名 values()
    # 按照指定的字段传入(可以少)
    2.insert into 表名 values()
'''

unsigned  #无符号
语法:
create table 表名 (
   元素名 数据类型 unsigned 
);

eg:
    create table v1(id int unsigned);

zerofilll  # 0填充
语法:
create table 表名 (
   元素名 数据类型 zerofill
);
eg:
  create table v2(id int(5) zerofill);
  insert into v2 values(2);

 

# default 默认值
语法:
create table 表名(
   id int,
   元素名 字符类型(16) default '字符内容'  
);

eg:
create table v3(
   id int,
   name varchar(16) default 'kk'  
);
insert into v3(id) values(2);

 

not null # 不能为空(使用频率高)
语法:
create table 表名(
    id int,
    字符名 字符类型 not null 
);

eg:
create table v4(
  id int,
  char varchar(16) not null
);
insert into v4 values(1,null); # 报错
insert into v4 values(1,''); # 不报错

 

# unique 唯一
'''单列唯一'''
语法:
create table 表名(
    id int,
    字符名 字符类型 unique 
);

eg:
create table v5(
  id int,
  char varchar(16) unique
);
insert into v5 values(1,'kk');
insert into v5 values(2,'kk'); # 报错

'''多列唯一'''
create table 表名(
    id int,
    元素1 int,
    元素2 int,
    unique(元素1,元素2)
);

eg:
create table  v6(
    id int,
    host int,
    port int,
    unique(host,port)
);
insert into v6 values(1,2,3);
insert into v6 values(2,2,3); # 报错

这篇关于mysql的存储的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!