数据库之数据类型
Posted sr-program
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库之数据类型相关的知识,希望对你有一定的参考价值。
一:数据库基础
【1】存储引擎:不同的数据类型对应不同的处理机制
(1)innodb:默认存储引擎 相比于myisam来说 读取速度较慢
(2)myisam:5.1之前用的版本 对数据的操控安全性不如innodb
(3)memory:临时存储引擎 数据存入内存 断电数据消失
(4)blackhole:黑洞引擎 无论存放什么数据 都会立马消失
# 查看存储引擎 show engines; create table t1(id int)engine=innodb; create table t2(id int)engine=myisam; create table t3(id int)engine=memory; create table t4(id int)engine=blackhole; insert into t1 values(1); insert into t2 values(2); insert into t3 values(3); insert into t4 values(4);
图解一:
Innodb:支持事务 行锁 外键 在安全性上比myisam更加高
图解二:
t1:
(1)frm:表结构
(2)ibd:真实存放的数据
t2:
frm:表结构
MYD:真实存放的数据
MYI:索引
PS:因为其有索引 所以查找数据速度比较快
t3/t4:
(1)frm:表结构
【1】创建表的完整语法结构
(1)语法 create table 表名(字段名 类型(宽度 约束条件),字段名 类型(宽度 约束条件));
PS:
(1)字段名 和类型必须要写
(2)宽度值和约束条件可写可不写
(3)字段名之间不能重复
(4)字段名最后一个千万不能加上逗号
例如:
create table userinfo(id int,name char);
(2)约束条件
宽度:
(1)作用:限制数据的存储位数
PS:
(1)当数据超出存储位数 会按照从左到右截断数据
(2)如果在严格模式下 超出数据位数会直接报错
例如:
insert into userinfo(name) values(‘SR‘); # 插入数据 select name from userinfo; # S
PS:上述插入char宽度默认为1位 所以只能插入一个S
(1)对于整型来说宽度不是用来限制存储的个数 而是用来限制展示出来的个数
(2)如果超过宽度则直接显示出来 如果小于宽度则以0补齐宽度
(3)只要是整型 都不需要指定宽度 因为有默认的宽度(默认宽度为11位 而int最大数据长度为10位) 足够显示对应的数据
(2)条件约束:
not null不能为空
create table userinfo(name char(16)); alter table userinfo modify name char not null insert into userinfo values(null); # 报错
PS:
(1)字段类型约束的是数据从存储类型
(2)约束条件是在对字段类型之上在进行约束
二:字段类型
(1)整形:TINYINT,SMALLINT, MEDIUMINT ,INT
TINYINT:
符号:默认有符号的
超出范围:会自动将值换成最先值或者最大值
例如:
create table t1(id TINYINT); insert into t1 values(-129),(128); # (-128),(127)
PS:如果有符号范围为(-128,127)
int
符号:默认有符号的
超出范围:会自动将值换成最先值或者最大值
例如:
create table t2(id int); insert into t2 values(-2222222222222222222),(222222222222222222222); # (-2147483648,2147483647)
PS:SMALLINT, MEDIUMINT 与上述情况一样
unsigned :
作用:将上述整形由默认带符号变成无符号
符号:无符号
范围:如果超出范围最小值为0 最大值为255
例如:
create table t4(id TINYINT unsigned); insert into t4 values(-129),(256); # (0,255)
(2)浮点型:
(1)float(255,30) 总共255位 小数部分占30位
(2)double(255,30) 总共255位 小数部分占30位
(3)decimal(65,30) 总共65位 小数部分占30位
例如:
create table t9(x float(255,30)); create table t10(x double(255,30)); create table t11(x decimal(65,30)); insert into t9 values(1.111111111111111111111111111111); insert into t10 values(1.111111111111111111111111111111); insert into t11 values(1.111111111111111111111111111111);
PS:精准度 float < double < decimal
(3)字符类型(char):
char:后面的数字是限制存储的数据长度的
例如:
create table t5(name char); insert into t5 values(‘SR‘); # S
PS:上述存放5位数据 但是由于char默认只能存一位 所以最终在数据库中存入S
char(宽度):宽度限制存放位数 如果超过则直接报错 如果不够自动用空格填充
varchar(宽度):宽度限制存放位数 如果超过则直接报错 有几个存几个
严格模式:
产生背景:
(1)对于上述例子中 虽然位数不够 其会帮我们截断进行存入数据库
(2)但是截断需要消耗数据库的操作 增大数据的压力
(3)而且截断的存入的数据 本身也不是我们所需要的数据
作用:
(1)可以通过设置严格模式 如果不符合我设置的规则 则会报错
# 查看严格模式 show variable like ‘%mode%‘ # 模糊匹配 like % 匹配任意多个字符 _ 匹配一个字符 set session 临时有效 只在你当前操作的窗口有效 set global 全局有效 终生有效 # 修改模式为严格模式 set global sql_mode = ‘STRICT_TRANS_TABLES‘;
PS:上述模式修改之后 一定要重新打开窗口
create table t6(name char); insert into t6 values(‘SR‘); # 报错
以上是关于数据库之数据类型的主要内容,如果未能解决你的问题,请参考以下文章