数据库
首页 > 数据库> > MySQL之存储引擎、基本数据类型及约束条件

MySQL之存储引擎、基本数据类型及约束条件

作者:互联网

一、存储引擎

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。

因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(Table Type,即存储和操作此表的类型)。

1.1 MySQL存储引擎

MySQL给开发者提供了查询存储引擎的功能,执行以下sql即可查询到mysql中的存储引擎:

show engines;

我的MySQL版本是5.6.50,下面是执行结果:

image

1.2 存储引擎的选择

功能 MYISAM Memory InnoDB Archive
存储限制 256TB RAM 64TB None
支持事务 No No Yes No
支持全文索引 Yes No No No
支持数索引 Yes Yes Yes No
支持哈希索引 No Yes No No
支持数据缓存 No N/A Yes No
支持外键 No No Yes No

二、MySQL基本数据类型

image

2.1 整形

不同的int类型能够存储的数字范围是不一样的。

  1. 要注意是否存负数(正负号需要占一个比特位)

  2. 针对手机号码只能用bigint

'''研究默认是否需要正负号'''
	create table t5(id tinyint);
	insert into t5 values(-999),(999);
'''结论:所有的int类型默认都需要正负号'''
	create table t6(id tinyint unsigned);  # 移除正负号
	insert into t6 values(-999),(999);

2.2 浮点型

float(255,30)  """总共255位 小数位占30位"""
double(255,30)  """总共255位 小数位占30位"""
decimal(65,30)  """总共65位 小数位占30位"""

"""研究三者的不同"""
create table tb7(id float(255,30));
create table tb8(id double(255,30));
create table tb9(id decimal(65,30));
insert into tb7 values(1.11111111111111111111111);
insert into tb8 values(1.11111111111111111111111);
insert into tb9 values(1.11111111111111111111111);

image

"""结论:三者的精确度不一样"""
float < double < decimal

一般情况下小数点后面只保留两位 所以float足矣;如果是从事高精密业务,则需要考虑更高的精确度。
ps:有时候很多看似需要用数字存储的数据,可能都是存的字符串。

2.3 字符类型

char(4):
	定长类型  最多只能存四个字符 多了报错少了自动空格填充至四个
varchar(4):
	变长类型  最多只能存四个字符 多了报错少了有几个则存几个

"""研究定长与变长特性"""
	create table t10(id int,name char(4));
	create table t11(id int,name varchar(4));
	insert into t10 values(1,'jason');
	insert into t11 values(1,'jason');

"""5.6版本以后超出范围不会报错,而是自动帮你截取并保存(此行为不合理)"""
方式1:命令修改(暂时)
	show variables like '%mode%';    '''查看当前sql_mode'''
	set session    '''当前窗口有效'''
	set global     '''当前服务端有效'''
	set global sql_mode = 'strict_trans_tables';
	'''修改完毕后退出客户端重新进入即可'''
	'''再次执行上述插入命令 会直接报错'''
方式2:修改配置文件(永久)
	'''添加如下语句'''
	[mysqld]  
	sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

'''统计某个字段数据的长度  char_length()'''
	insert into t10 values(2,'j');
	insert into t11 values(2,'t');
'''底层确实会填充  但是取出来的时候又会自动去除'''
	set global sql_mode = 'strict_trans_tables,pad_char_to_full_length';
	select char_length(name) from tb10;
	select char_length(name) from tb11;

2.4 char与varchar的对比

补充:在创建字段的时候可以加上相应的注释

create table tb12(
	id int comment '序号',
	name char(4) comment '姓名'
);

2.5 整形中括号内数字的作用

create table t13(id int(3));
insert into t13 values(4444444);  '''正常显示'''

在整型中括号内的数字并不是用来限制存储的长度,而是用来控制展示的长度,需搭配约束条件(如:zerofill)一起使用。
我们以后在定义整型字段的时候,基本不需要自己添加数字,使用默认的即可。

create table t14(id int(3) zerofill);
insert into t13 values(4);  '''显示004'''
"""结论:整型比较特殊 是唯一个括号内的数字不是用来限制存储长度的类型"""

2.6 枚举与集合类型

2.7 日期类型

date		年月日
datetime	年月日时分秒
time		时分秒
year		年份

create table client(
	id int,
    name varchar(32),
    reg_time date,
    birth datetime,
    study_time time,
    join_time year
);
insert into client values(1,'jason','2000-11-11','2000-1-21 11:11:11','11:11:11',1995);

三、创建表

3.1 创建表的完整语法

create table 表名(
	字段名1 字段类型(数字) 约束条件,
	字段名2 字段类型(数字) 约束条件,
	字段名3 字段类型(数字) 约束条件
);

3.2 约束条件

约束条件相当于是在字段类型的基础之上添加的额外约束

标签:约束条件,存储,create,数据类型,引擎,InnoDB,MySQL,table,id
来源: https://www.cnblogs.com/JZjuechen/p/15911501.html