问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据库的常用数据类型

发布网友 发布时间:2022-04-25 17:07

我来回答

1个回答

懂视网 时间:2022-05-03 01:06

数据库支持的数据类型

整型

# 建表
mysql>: create table tb1(x tinyint, y smallint, z int(6));

# 插入数据
mysql>: insert into tb1 values(128, 32768, 32768);?# 结果:127,32767,32768

# 结论:整型的长度由所占字节(取值范围)决定,可以自定义长度,但是不影响所占字节(取值范围)
# 所有整型变量的长度一般都省略不写
结论>: create table tb1(x tinyint, y smallint, z int);


# 整型约束
mysql>: create table tb2(x tinyint unsigned);?# 0~255
mysql>: insert into tb2 values(256), (-1);??# 255, 0
???
# 0填充约束
mysql>: create table tb3(x tinyint unsigned zerofill);
mysql>: insert into tb3 values(10);?# 010

tinyint

  • 1字节
  • 取值范围-128~127
  • 默认长度4
  • smallint

  • 2字节
  • 取值范围-32768~32767
  • 默认长度6
  • mediumint

  • 3字节
  • 取值范围-16777216~16777215
  • 默认长度9
  • int

  • 4 字节
  • 取值范围-2147483649~2147483647
  • 默认长度11
  • bigint

  • 8字节
  • 约束

  • unsigned 无符号
  • 默认长度-1
  • zerofill 0填充
  • 当数字长度不到默认长度时,用0在前面补全
  • PS:超出范围会用极限值来存储

    浮点数

    # 建表:
    mysql>: create table tb4 (age float(256, 30)); # Display width out of range for column 'age' (max = 255)
    mysql>: create table tb5 (age float(255, 31)); # Too big scale 31 specified for column 'age'. Maximum is 30.
    mysql>: create table tb5 (age float(65, 30)); # 在合理取值范围
    ???
    mysql>: create table t12 (x float(255, 30));
    mysql>: create table t13 (x double(255, 30));
    mysql>: create table t14 (x decimal(65, 30));
    # 1.111111164093017600000000000000?
    mysql>: insert into t12 values(1.11111111111111111119);??
    # 1.111111111111111200000000000000
    mysql>: insert into t13 values(1.11111111111111111119);
    # 1.111111111111111111190000000000
    mysql>: insert into t14 values(1.11111111111111111119);
    
    # 重点:长度与小数位分析
    # 报错,总长度M必须大于等于小数位D
    mysql>: create table t14 (x decimal(2, 3));
    
    # 能存储 -0.999 ~ 0.999,超长度的小数位会才有四舍五入,0.9994可以存,就是0.999,0.9995不可以存
    mysql>: create table t14 (x decimal(3, 3));?# 整数位 3 - 3,所以最大为0
    
    # 能存储 -9.999 ~ 9.999,超长度的小数位会才有四舍五入,9.9994可以存,就是9.999,9.9995不可以存
    mysql>: create table t14 (x decimal(4, 3));?# 整数位 4 - 3,所以最大为9
    
    # 能存储 -99.999 ~ 99.999,超长度的小数位会才有四舍五入,99.9994可以存,就是99.999,99.9995不可以存
    mysql>: create table t14 (x decimal(5, 3));?# 整数位 5 - 3,所以最大为99

    float(M, D)

  • 4字节
  • 子主题 1
  • 精度最低,最常用(占用字节少)
  • double(M, D)

  • 8字节
  • 精度高,占位多
  • decimal(M, D) 定点型

  • 全精度,用字符串表示小数
  • 占用字节的长度在M,D的基础上+2,表示符号和小数点
  • (M,D)

  • M 表示位数
  • D 表示小数位
  • M要大于等于D
  • PS:超出范围会用极限值来存储

    字符串

    # 建表:
    mysql>: create table ts1 (s1 char(4), s2 varchar(4));
    mysql>: insert into ts1 values('adcde', 'xyzabc');?# 'adcd', 'xyza'

    char(n)

  • 定长
  • 永远采用设置的长度存储数据
  • 数据的长度永远为n
  • varchar(n)

  • 不定长
  • 在设置的长度范围内,变长的存储数据
  • 数据的长度为具体字符串的长度,并将这个长度存储在别处,查询的时候使用
  • char与varchar比较

  • char
  • 存取取数据时,按固定长度操作,效率高
  • varchar
  • 存储数据时,会现计算数据的长度,动态变长的存储数据,所以一般比较省空间,但计算耗时,效率低
  • 注意的是因为计算的数据长度也要空间存储,存储在数据头(数据开始前),也需要1~2个字节
  • 总结:
  • 数据长度变化不大,用char
  • 数据长度变化大,用varchar
  • PS:超范围会舍弃范围外的字符串

    时间

    # 建表:
    mysql>: create table td1 (my_year year, my_date date, my_time time);
    mysql>: insert into td1 values(1666, '8888-8-8', '8:8:8');?# 时间需要在取值访问内
    
    mysql>: create table td2 (my_datetime datetime, my_timestamp timestamp);??
    mysql>: insert into td2 values('2040-1-1 1:1:1', '2040-1-1 1:1:1');?# 时间需要在取值访问内??
    mysql>: insert into td2(my_datetime) values('2040-1-1 1:1:1');?# timestamp不复制会才有系统当前时间
    
    # datetime:8字节,可以为null
    # timestamp:4字节,有默认值CURRENT_TIMESTAMP

    year

  • yyyy(1901/2155)
  • date

  • yyyy-MM-dd(1000-01-01/9999-12-31)
  • time

  • HH:mm:ss
  • datetime

  • 8字节
  • 可以为null
  • yyyy-MM-dd HH:mm:ss(1000-01-01 00:00:00/9999-12-31 23:59:59)
  • timestamp

  • 4字节
  • 有默认值,基于当前时间
  • yyyy-MM-dd HH:mm:ss(1970-01-01 00:00:00/2038-01-19 ??)
  • ?? 表示截止的具体时间未知
  • PS:时间存储时要超出范围,否则数据会不精确

    枚举与集合

    # 建表
    # enum、set默认值为NULL
    mysql>: create table tc1 (name varchar(20), sex enum('男', '女', '哇塞'), hobbies set('男', '女', '哇塞'));
    mysql>: insert into tc1 values('ruakei', '哇塞哇塞', '未知');??
    ???
    # enum、set手动设置默认值 '男' 与 '哇塞'
    mysql>: create table tc2 (name varchar(20), sex enum('男', '女', '哇塞') default '男', hobbies set('男', '女', '哇塞') default '哇塞');
    mysql>: insert into tc2 values('ruakei', '哇塞哇塞', '未知');??
    mysql>: insert into tc2(name) values('ruakei');
    ???
    # 对sex、hobbies两个字段赋值错误,系统默认用空字符串填充(非安全模式),安全模式抛异常
    # 如果对出sex、hobbies两个字段外的其他字段进行赋值,这两个字段会才有默认值
    
    # 注:对set类型的字段进行赋值,用一个字符串,字符串内部用,将多个选项隔开,且不能添加空格等其他额外字符
    mysql>: insert into tc2 values('ruakei_1', '女', '男,女,哇塞');??

    枚举

  • 枚举里的值都是字符串
  • 存储的时候只能选一个
  • 集合

  • 集合里的值都是字符串
  • 存储的时候可以选择任意个
  • PS:可以设置默认值,不设置时是null,不赋值的时候为默认值

    当存储的值不在你的设置范围了,就用null存储

    PS:对set类型的字段进行赋值,用一个字符串,字符串内部用,将多个选项隔开,且不能添加空格等其他额外字符

    约束

    # not null 与 default 限制
    # 不能为空,没有默认值的x,必须赋值
    # y、z在没有赋值情况下,才有默认值,设置值后,采用默认值
    mysql>: create table td1 (x int not null, y int default 0, z int default 100);
    
    # 报错,auto_increment必须设置给 键字段
    mysql>: create table td2 (x int auto_increment);
    # 报错,auto_increment必须设置给 int字段
    mysql>: create table td2 (x char(4) auto_increment);
    # 报错,auto_increment字段最多出现 1次
    mysql>: create table td2 (x int unique auto_increment, y int unique auto_increment);
    
    # 正确,主键和唯一键分析
    # x为主键:没有设置primary key时,第一个 唯一自增键,会自动提升为主键
    mysql>: create table td21 (x int unique auto_increment, y int unique);
    # y为主键:没有设置primary key时,第一个 唯一自增键,会自动提升为主键
    mysql>: create table td22 (x int unique, y int unique auto_increment);
    # x为主键:设置了主键就是设置的,主键没设置自增,那自增是可以设置在唯一键上的
    mysql>: create table td23 (x int primary key, y int unique auto_increment);
    # x为主键:设置了主键就是设置的,主键设置了自增,自增字段只能有一个,所以唯一键不能再设置自增了
    mysql>: create table td24 (x int primary key auto_increment, y int unique);
    # 默认主键:没有设置主键,也没有 唯一自增键,那系统会默认添加一个 隐式主键(不可见)
    mysql>: create table td25 (x int unique, y int unique);
    
    # 唯一键:确保一个字段,数据不能重复
    # 主键:是一条记录的唯一标识(可以理解为数据的编号)
    
    # 联合唯一
    # ip在port不同时,可以相同,ip不同时port也可以相同,均合法
    # ip和port都相同时,就是重复数据,不合法
    mysql>: create table tu1 (ip char(16), port int, unique(ip, port));
    
    # 也可以设置成 联合主键,道理同 联合唯一
    mysql>: create table tu2 (ip char(16), port int, primary key(ip, port));
    # sql可以多行书写
    mysql>:?
    create table t22(
     ip char(16),
    ??port int,
    ??primary key(ip,port)
    );

  • primary key
  • 主键
  • foreign key
  • 外键
  • unique
  • 唯一性数据
  • auto_increment
  • 自增
  • 只能加给有key的int类型
  • 作为辅助修饰
  • 一般来说,一个表只有一个自增字段
  • not null
  • 不为空
  • 对于某些数据,不能让它存空值,一定要有数据
  • default
  • 默认值
  • 对于没有存储的字段,用默认值存储
  • unsigned
  • 无符号
  • 针对数字,没有负数,从0开始
  • zerofill
  • 0填充
  • 存整数时数据长度小于取值范围长度,会在数字前用0填充
  • 联合唯一
  • unique(字段1,字段2)
  • 表示两条记录不能字段1和字段2同时相同
  • XMind: ZEN - Trial Version

    数据库支持的数据类型

    标签:情况下   字段   rem   range   安全   选项   隐式   enum   才有   

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    形容手表很舒服的句子 情侣手表的对话句子 租门面和房东鉴了十年合同,房东要退店面,我可以不退吗,继续经 ...一篇朝花夕拾里十篇小短文的主要内容及作者的情感和主要人物的... 什么叫狼狗 狼狗的生活习性有哪些? 起个姓罗好听的宝宝名字 野火的近义词 个是词语解释 请旌词语解释 数据库数据类型有哪些 SQL数据库的数据类型有哪些,请详细解释一下 ‘’飘渺‘’和‘’缥缈‘’哪个是对的? 小米手机打字的时候为什么经常键盘谈不出来! 小米手机不能全键盘打字怎么办? 小米手机打字时,键盘不出来怎么解决? 红米手机输入法停止运行,无法打字,没有输入键盘怎么办? 小米手机双清后,键盘打不出字联不了网怎么办? 农历九月份是冬季吗? 农历9月30日是阳历的几月几日 小米手机自带的键盘打不出汉字,求帮助 小米手机键盘打不开了怎么弄 孕妇可以吃猪的心肺吗 农历9月是什么星座? 孕妇可以天天吃猪油炒菜吗 三个月的孕妇可以吃卤猪脚吗 孕妇吃猪小肚有什么好处 孕妇可以吃买的猪蹄吗 孕妇吃猪小肚,其实是有什么功效的啊 孕妇吃猪血对胎儿有影响吗 数据库的数据类型 海信冰箱bcd236wdg冷藏室没有排水孔 作为一名幼儿园教师应具备哪些专业能力 幼儿园教师专业能力包括哪些方面 海信电冰箱,为什么冷藏室没有排水孔? 新时代幼儿园教师应该具备哪些专业能力? 幼儿教师专业? 幼儿教师必须具备哪些专业能力 重新思考幼儿园教师需要什么样的专业能力 幼儿园教师专业标准中规定的幼儿园教师必须具备的五大专业能力是哪五项? 作为一名幼儿园教师应具备哪些专业知识和专业能力 幼儿园教师的专业标准是什么 幼儿园教师基本功和专业技能有哪些 幼儿园教师专业素养包括哪些内容 幼儿园教师专业标准有多少领域 幼儿园教师的专业知识有哪些领域 淘宝7天退换是什么意思 商场承诺七天包退包换是什么意思? 商品无质量问题买家能否要求退货? 七天包退换什么意思