05 数据类型

数据类型

创建表的完整语法

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

注意

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

  2. 宽度和约束条件是可选的(可写可不写),字段名和类型是必须的
    约束条件写的话 也支持写多个

  3. 最后一行不能有逗号

宽度

一般情况下指的是对存储数据的限制

create table t1(name char); 默认字符宽度为1

5.6 版本默认没有开启严选模式 如果超出了一个字符,会自动截取

5.7版本以上默认开启了严选模式,超出了规定的长度会报错

严选模式开不开?

使用数据库的准则:能让数据库少干活就少干活,减轻负担

自动截取字符就属于让数据库多干了活,所以开了为好。(目前阶段不用纠结开不开,了解就好)

基本数据类型

整型

  • 分类
    TINYINT、SMALLINT、MEDUIMINT、INT、BIGINT

  • 作用
    存储年龄、登记、ID、号码等。

以 TINYINT 为例

    是否有符号

            整型默认情况是带符号的

    超出会如何

            超出限制只存最大可接受值

以一个例子说明(可以对照敲一下,较高版本可能不会截断而是报错)

可以添加约束条件,变成无符号。create table t2(id tinyint unsigned);

整型关系的特例

create table t12(id int(8));
insert into t12 values(123456789);

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

浮点型

  • 分类
    FLOAT、DOUBLE、DECIMAL

  • 作用
    身高、体重、薪资

# 存储限制
float(255,30)  # 总共255位 小数部分占30位
double(255,30)  # 总共255位 小数部分占30位
decimal(65,30)  # 总共65位 小数部分占30位

# 精确度验证
create table t3(id float(255,30));
create table t4(id double(255,30));
create table t5(id decimal(65,30));


insert into t3 values(1.111111111111111111111111111111);
insert into t4 values(1.111111111111111111111111111111);
insert into t5 values(1.111111111111111111111111111111);

float < double < decimal
# 要结合实际应用场景 三者都能使用

字符类型

"""
char
    定长
    char(4)     数据超过四个字符直接报错 不够个字符空格补全
varchar
    变长
    varchar(4)  数据超过四个字符直接报错 不够有几个存几个
"""
create table t6(name char(4));
create table t7(name varchar(4));

insert into t6 values('a');
insert into t7 values('a');

# 介绍一个小方法 char_length统计字段长度
select char_length(name) from t6;
select char_length(name) from t7;
"""
首先可以肯定的是 char硬盘上存的绝对是真正的数据 带有空格的
但是在显示的时候MySQL会自动将多余的空格剔除
"""


char 与 varchar 对比

char
缺点:浪费空间
优点:存取都很简单
直接按照固定的字符存取数据即可
jason egon alex wusir tank
存按照五个字符存 取也直接按照五个字符取

varchar
优点:节省空间
缺点:存取较为麻烦
1bytes+jason 1bytes+egon 1bytes+alex 1bytes+tank
存的时候需要制作报头
取的时候也需要先读取报头 之后才能读取真实数据

以前基本上都是用的 char 其实现在用 varchar 的也挺多

时间类型

  • 分类
    date:年月日 2023-5-4
    datetime:年月日时分秒 2023-5-4 11:11:11
    time:时分秒11:11:11
    Year:2023

        create table student(
            id int,
            name varchar(16),
            born_year year,
            birth date,
            study_time time,
            reg_time datetime
        );
        insert into student values(1,'xxx','2000','2000-11-11','11:11:11','2000-11-11 11:11:11');
    

枚举类型

  • 分类
    枚举(enum):多选一
    集合(set):多选多(可以只选一个,但不能写没有列举的)

  • 使用

    create table user(
        id int,
        name char(16),
        gender enum('male','female','others')
    );
    insert into user values(1,'xxx','male');  正常
    insert into user values(2,'yyy','xxxxooo');  报错
    # 枚举字段 后期在存数据的时候只能从枚举里面选择一个存储 
    
    create table teacher(
         id int, name char(16), 
        gender enum('male','female','others'),
         hobby set('read','DBJ','hecha') ); 
    insert into teacher values(1,'aaa','male','read'); 正常 
    insert into teacher values(2,'bbb','female','DBJ,hecha'); 正常 
    insert into teacher values(3,'ccc','others','生蚝'); 报错
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值