2024年最新【MySQL必知必会】字段,2024阿里+头条+腾讯等大厂C C++笔试题分享

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

字段

MySQL 中有很多字段类型,比如整数、文本、浮点数,等等。如果类型定义合理,就能节省存储空间,提升数据查询和处理的速度,相反,如果数据类型定义不合理,就有可能会 导致数据超出取值范围,引发系统报错,甚至可能会出现计算错误的情况,进而影响到整个系统。

整数类型

在这里插入图片描述
因此,我建议你首先确保数据不会超过取值范围,在这个前提之下,再去考虑 如何节省存储空间.

浮点数类型和定点数类型

  • FLOAT 表示单精度浮点数;
  • DOUBLE 表示双精度浮点数;
  • FLOAT 占用字节数少,取值范围小;DOUBLE 占用字节数多,取值范围也大。
  • REAL 默认就是 DOUBLE。如果你把 SQL 模式设定为启用“REAL_AS_FLOAT”,那 么,MySQL 就认为 REALFLOAT。如果要启用“REAL_AS_FLOAT”,就可以通过 以下 SQL 语句实现:
SET sql_mode = “REAL_AS_FLOAT”;

在这里插入图片描述

浮点数类型有个缺陷,就是不精准。因此,在一些对精确度要求 较高的项目中,千万不要使用浮点数,不然会导致结果错误,甚至是造成不可挽回的损失。



CREATE TABLE demo.goodsmaster (
barcode TEXT, goodsname TEXT, price DOUBLE, itemnumber INT PRIMARY KEY AUTO_INCREMENT
);


INSERT INTO demo.goodsmaster (
barcode, goodsname, price
) VALUES (
'0001', '书', 0.47
);

SELECT \* from demo.goodsmaster;

INSERT INTO demo.goodsmaster (
barcode, goodsname, price
) VALUES (
'0002', '笔', 0.44
);

SELECT \* from demo.goodsmaster;

insert into demo.goodsmaster  
(barcode,goodsname,price)values ('0003', '胶水',  0.19);


SELECT SUM(price)
FROM demo.goodsmaster;

-- SELECT \* FROM demo.goodsmaster    不能这样写 因为商品名可能会重复
-- WHERE SUM(price) = 1.1;

-- SELECT goodsname,SUM(price) 
-- FROM demo.goodsmaster
-- GROUP BY goodsname
-- HAVING SUM(price)=1.1;


其中 price 就是浮点数类型 得到结果是
在这里插入图片描述
问题还是出在 MySQL 对浮点类型数据的存储方式上。
MySQL 用 4 个字节存储 FLOAT 类型数据,用 8 个字节来存储 DOUBLE 类型数据。无论哪个,都是采用二进制的方式来进行存储的。比如 9.625,用二进制来表达,就是 1001.101。如果尾数不是 0 或 5,就无法用一个二进制数来精确表达就只好在取值允许的范围内进行近似(四舍五入)。数据类型是 DOUBLE 的时候,我们得到的结果误差更小一些, 而数据类型是 FLOAT 的时候,误差会更大一下。原因就是,DOUBLE 有 8 位字节,精度更高。

优化 : 定点数类型:DECIMAL。
DECIMAL(M,D)的方式表示高精度小数。M 表示整数部分加小数部分,一共有多少位,M<=65。D 表示小数部分位数,D<M
在这里插入图片描述

ALTER TABLE demo.goodsmaster
MODIFY COLUMN price DECIMAL(5, 2);

SELECT SUM(price)
FROM demo.goodsmaster;

总结:
浮点类型取值范围大,但是不精准,适用于需要取值范围大,又可以容忍微小误差的科学计算场景(比如计算化学、分子建模、流体动力学 等);定点数类型取值范围相对小,但是精准,没有误差,适合于对精度要求极高的场景 (比如涉及金额计算的场景)。

文本类型

  • CHAR(M):固定长度字符串。CHAR(M) 类型必须预先定义字符串长度。如果太短,数 据可能会超出范围;如果太长,又浪费存储空间。
  • VARCHAR(M): 可变长度字符串。VARCHAR(M) 也需要预先知道字符串的最大长度, 不过只要不超过这个最大长度,具体存储的时候,是按照实际字符串长度存储的。
  • TEXT:字符串。系统自动按照实际长度存储,不需要预先定义长度。
  • ENUM: 枚举类型,取值必须是预先设定的一组字符串值范围之内的一个,必须要知道 字符串所有可能的取值。
  • SET:是一个字符串对象,取值必须是在预先设定的字符串值范围之内的 0 个或多个, 也必须知道字符串所有可能的取值。

对于 ENUM 类型和 SET 类型来说 一般用于 参数设定的取值范围只有几个固定值的场景 , 其中 TEXT 类 型最为灵活方便
TEXT 类型也有 4 种,它们的区别就是最大长度不同。

  • TINYTEXT:255 字符(这里假设字符是 ASCII 码,一个字符占用一个字节,下同)。
  • TEXT: 65535 字符。
  • MEDIUMTEXT:167 77215 字符。
  • LONGTEXT: 4294967295 字符(相当于 4GB)。
    由于实际存储的长度不确定,MySQL 不允许 TEXT 类型的字段做主键。遇到这种情况,你只能采用 CHAR(M),或者 VARCHAR(M),非主段的就可以按照数据可能的最大长度, 选择这几种 TEXT 类型中的的一种,作为存储字符串的数据类型

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

开发知识点,真正体系化!**

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值