数据库的数据类型

存储引擎

针对不同的文件格式会有不同的存储方式和处理机制,针对不同的数据应该有对应不同的处理机制来存储

mysql主要的存储引擎

  • innodb

    这个是mysql5.5版本之后默认的存储引擎,存储数据更加的安全

  • myisam

    这个是mysql5.5版本之前默认的存储引擎,速度比innodb更快,但是数据不安全

  • memory

    内存引擎,数据全部放在内存中,断电数据丢失

  • 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(1);
insert into t3 values(1);
insert into t4 values(1);
查看表发现t1 and t2有东西,但是只要mysql重新启动,t3就是空,t4会即刻释放

创建表的完整语法

# 语法
create table 表名(
    字段名1 类型(宽度) 约束条件
    字段名2 类型(宽度) 约束条件
    字段名3 类型(宽度) 约束条件    
    字段名4 类型(宽度) 约束条件
)

强调

  • 在同一张表中字段名字不能重复

  • 宽度和约束条件是可选的,约束条件支持多个

    字段名1 类型(宽度) 约束条件1 约束条件2;

    create table t5(id);报错

  • 最后一行不能有逗号

    create table t6(
    
        id int,
        name char
    )
    

补充说明

  • 宽度:一般情况下指对存储数据的限制

    create table t7(name char); 默认宽度是1
    insert into t7 values('json');
    insert into t7 values(null);null是关键字
    

    针对不同的版本是出现不同的效果

    5.6版本默认没有开启严格模式,规定只能存放一个字符,多出的字符自动截取

    5.7版本以上是开启了严格模式,规定存放的个数,多出自动报错

  • 严格模式: mysql5.7之后的版本是默认开启的严格模式,使用数据库的标准就是:能尽量少的让数据库敢活就尽量少,不给数据库增加额外的压力。

  • 约束条件:null not null不能插入rull

    create table t8(id int,name char not null)

  • 宽度和约束条件的关系:宽度是限制数据的存储,约束条件是在宽度的基础上增加额外的约束

基本数据类型

整型

  • 分类

    TINYINT SMALLINT MEDUIMINT INT BIGINT

  • 作用

    存一些年龄,等级 id,号码等等

例子:TINYINT 是否有符号,默认的是带符号的,超出限制存最大可接受值

create table t9(id tinyint);
insert into t9 values(-129),(256);

# 约束条件unsigned 无符号
create table t10(id tinyint unsigned);

create table t11(id int);
# int 默认也是带符号的,整型默认情况下的欧式带有符号的

# 针对整型 括号内的宽度有限
create table t12(id int(8));
insert into t12 values(123456789)

"""
特例:只有整型括号里面的数字不是表示限制位数
id int(8)
	如果数字没有超出8位 那么默认用空格填充至8位
	如果数字超出了8位 那么有几位就存几位(但是还是要遵守最大范围)
"""

create table t13(id int(8) unsigned zerofill);

# 针对整型字段括号内无需指定宽度,默认的宽度足够显示所有数据


严格模式

# 如何查看严格模式
show variables like "%mode";

模糊匹配/查询
	关键字 like
		%:匹配任意多个字符
        _:匹配任意单个字符

# 修改严格模式
	set session  只在当前窗口有效
    set global   全局有效
    
    set global sql_mode = 'STRICT_TRANS_TABLES';
    
    修改完之后 重新进入服务端即可

浮点型

  • char(4) 数据超过4个字符直接报错,不厚的字符空格补全
  • varchar(4) 数据超过4个字符直接报错,不够截取
create table t18(name char(4));
create table t19(name varchar(4));
insert into t18 values('a');
insert into t19 values('a');
# 统计char_length字段长度
select char_length(name) from t18;
# char硬盘里存放的是真正的数据,带有空格的,但是在mysql显示会自动将多余的空格剔除

# 再次修改sql_mode 让MySQL不要做自动剔除操作
set global sql_mode='STRICT_TRABLES,PAD_CHAR_TO_FULL_LENGTH'

char和varchar对比

char 缺点:浪费空间
	 优点:直接按照固定的字符存取数据
     json egon alex wusir tank
     存按照五个字符存,取也是五个字符取
    
varchar 优点:节省空间
		缺点:存取比较麻烦
    		存的时候需要制作报头,取也需要报头,最后才能取到真实的数据,

时间类型

  • 分类:data: 年月日2015-2-03

    ​ datatime:年月日时分秒

    ​ time:时分秒

    ​ Year:2020

    create table student(
        id int,
        name varchar(6),
        born_year year,
        birth data,
        study_time time,
        reg_time datatime
    );
    insert into student values(1,'zc','1990','1999-11-11','11:11:11','2020-11-11 11:11:11');
    

枚举与集合

  • 分类:枚举(多选一)

    ​ 集合(多选多)

  • 具体用法

    create table user(
    	id int,
        name char(16),
        gender enum('male','female')
    );
    insert into user values(1,'zc','male')
    # 枚举后期存数据的时候只能从里面悬着一个存储
    
    create table teacher(
    	id int,
        name char(6),
        gender enum('male','female'),
        hobby set('read','play','running')
    
    )
    
    insert into teacher values(1,'zc','male','read');
    insert into teacher values(2,'zcc','female','read,running');
    insert into teacher values(2,'zcz','male','eat');
    # 集合可以写一个或选择多个,但是不能写里面没有的
    
posted @ 2020-05-04 18:52  小子,你摊上事了  阅读(160)  评论(0)    收藏  举报