MySQL知识点

MySQL核心基础:数据类型、运算符与单表操作全解析

MySQL作为主流的关系型数据库管理系统,数据类型的合理选择、运算符的灵活运用以及单表的增删改查操作,是搭建稳定数据库架构和实现高效数据管理的基础。本文将结合实战场景,详细拆解MySQL的数据类型、运算符体系,以及单表的核心操作方法。

一、精准选型:MySQL数据类型详解

MySQL提供了丰富的数据类型,主要分为数值类型字符串类型日期时间类型三大类,不同类型对应不同的存储需求和业务场景,选对类型能大幅提升数据库性能和数据准确性。

1. 数值类型:处理数字数据的核心

数值类型分为整型和小数类型,适用于存储年龄、薪资、数量等数字类数据。

  • 整型

整型包含TINYINTSMALLINTMEDIUMINTINTBIGINT,区别在于存储字节数和取值范围不同。例如TINYINT占1字节,有符号范围为-128~127,无符号范围为0~255

整型的重要属性AUTO_INCREMENT可实现字段值自增,常用于生成唯一主键。使用时需注意,一个表只能有一个自增字段,且该字段需定义为NOT NULL并设置为PRIMARY KEYUNIQUE

  • 小数类型

小数类型分为浮点数FLOATDOUBLE)和定点数DECIMAL)。浮点数存储近似值,精度较低但存储效率高;定点数以字符串形式存储,精度极高,适合存储货币、金额等对精度要求严格的数据。

定义DECIMAL(M,D)时,M表示总位数,D表示小数位数。例如DECIMAL(5,2)可存储-999.99~999.99的数值。

2. 字符串类型:存储文本与二进制数据

字符串类型用于存储姓名、地址、描述等文本信息,也可存储图片、文件等二进制数据,核心类型及特点如下:

类型 特点 适用场景
CHAR(n) 固定长度,最多255字符,查询速度快但可能浪费空间 存储长度固定的数据,如手机号、身份证号
VARCHAR(n) 可变长度,最多65535字符,节省空间 存储长度不固定的数据,如姓名、商品名称
TEXT系列 包括TINYTEXTTEXTMEDIUMTEXTLONGTEXT,存储容量逐级增大 存储长文本,如文章内容、商品详情
BLOB系列 二进制字符串,存储图片、音频等二进制数据 存储非文本类二进制文件

关键区别CHAR会自动填充空格至指定长度,查询时删除尾部空格;VARCHAR仅存储实际字符长度加1字节,更节省空间。

3. 日期时间类型:记录时间维度数据

日期时间类型用于存储创建时间、入职日期等时间相关数据,常用类型及格式如下:

  • DATE:格式YYYY-MM-DD,存储日期,范围1000-01-01~9999-12-31
  • DATETIME:格式YYYY-MM-DD HH:MM:SS,存储日期和时间,不受时区影响。
  • TIMESTAMP:格式同DATETIME,但受时区影响,且取值范围较小,适合记录数据的修改时间。
  • YEAR:格式YYYY,仅存储年份,范围1901~2155

使用时可通过DATE_FORMAT函数格式化输出,例如查询2021年1月的所有数据:

SQL 复制代码
SELECT * FROM tb_test WHERE DATE_FORMAT(update_time,'%Y-%m')='2021-01';

二、灵活运算:MySQL运算符体系

MySQL运算符用于实现数据的计算、比较和逻辑判断,主要分为算术运算符、比较运算符、逻辑运算符和位运算符四类。

1. 算术运算符:实现数值计算

算术运算符包括+(加)、-(减)、*(乘)、/(除)、%(取余),适用于对数值类型字段进行计算。例如查询学生的数学和英语成绩总和:

SQL 复制代码
SELECT name, math + english AS total_score FROM stu;

2. 比较运算符:筛选符合条件的数据

比较运算符用于判断数据是否符合条件,返回结果为1(真)、0(假)或NULL,常用运算符及用法如下:

  • =:判断是否相等,NULL参与比较时结果为NULL
  • <=>:安全等于,可判断NULL值,例如NULL <=> NULL返回1
  • BETWEEN ... AND ...:判断值是否在指定范围内。
  • IN/NOT IN:判断值是否在指定集合中。
  • LIKE:模糊查询,支持%(匹配任意长度字符串)和_(匹配单个字符)通配符。

示例:查询成绩在50~80之间的学生:

SQL 复制代码
SELECT * FROM stu WHERE score BETWEEN 50 AND 80;

3. 逻辑运算符:组合多条件筛选

逻辑运算符用于连接多个条件,实现复杂筛选,核心包括AND(与)、OR(或)、NOT(非)、XOR(异或)。

  • AND:所有条件都为真时返回1,否则返回0
  • OR:任意一个条件为真时返回1
  • NOT:取反,条件为真时返回0,条件为假时返回1

示例:查询成绩大于60且性别为男的学生:

SQL 复制代码
SELECT * FROM stu WHERE score > 60 AND sex = '男';

4. 位运算符:二进制层面的运算

位运算符用于对数据的二进制位进行操作,包括&(位与)、|(位或)、^(位异或)、<<(左移)、>>(右移)等。例如计算10 | 15的结果:

SQL 复制代码
SELECT 10 | 15; -- 结果为15

5. 运算符优先级

运算符的优先级决定了运算的执行顺序,优先级高的运算符先执行。例如算术运算符优先级高于比较运算符,比较运算符高于逻辑运算符。无法确定优先级时,可使用括号()强制改变执行顺序。

三、实战核心:MySQL单表CRUD操作

CRUD是数据库操作的核心,即插入(Create)、查询(Read)、更新(Update)、删除(Delete),掌握单表的CRUD操作是MySQL入门的关键。

1. 插入数据:INSERT语句

INSERT语句用于向表中添加新数据,支持插入单行或多行数据,语法灵活。

  • 基本语法

    SQL 复制代码
    INSERT INTO 表名(字段1,字段2,...) VALUES(值1,值2,...);
  • 批量插入

    SQL 复制代码
    INSERT INTO stu(name,sex,math) VALUES 
    ('张三','男',88),
    ('李四','女',92);
  • 带函数插入

可结合NOW()等函数插入动态数据,例如插入当前时间:

SQL 复制代码
INSERT INTO log(content,create_time) VALUES ('测试数据',NOW());

注意事项 :字段列表和值列表必须一一对应;自增字段、允许NULL的字段、有默认值的字段可省略不写。

2. 查询数据:SELECT语句

SELECT是使用最频繁的语句,用于从表中获取数据,支持简单查询、条件查询、排序、分页等复杂操作。

  • 无条件查询:查询表中所有数据或指定字段

    SQL 复制代码
    SELECT * FROM stu; -- 查询所有字段,效率低,不推荐
    SELECT name,score FROM stu; -- 查询指定字段
  • 条件查询 :使用WHERE子句筛选数据

结合比较运算符和逻辑运算符,实现精准筛选,例如查询姓名以"张"开头的学生:

SQL 复制代码
SELECT * FROM stu WHERE name LIKE '张%';
  • 排序查询ORDER BY子句

按指定字段排序,ASC为升序(默认),DESC为降序。例如按成绩降序排列:

SQL 复制代码
SELECT * FROM stu ORDER BY score DESC;
  • 分页查询LIMIT子句

用于限制查询结果的条数,实现分页功能,语法为LIMIT 起始位置, 条数。例如查询第3~5条数据:

SQL 复制代码
SELECT * FROM stu LIMIT 2,3; -- 起始位置从0开始
  • 统计查询:聚合函数

常用聚合函数包括COUNT()(统计条数)、SUM()(求和)、AVG()(平均值)、MAX()(最大值)、MIN()(最小值)。例如统计学生的平均成绩:

SQL 复制代码
SELECT AVG(score) AS avg_score FROM stu;
  • 分组查询GROUP BY子句

按指定字段分组,常与聚合函数结合使用。例如按性别分组,统计每组的人数:

SQL 复制代码
SELECT sex,COUNT(*) AS num FROM stu GROUP BY sex;

可使用HAVING子句对分组结果进行筛选,注意HAVINGWHERE的区别:WHERE筛选原始数据,HAVING筛选分组后的数据,且HAVING可使用聚合函数。

3. 更新数据:UPDATE语句

UPDATE语句用于修改表中已存在的数据,可更新单个字段、多个字段,或对字段值进行追加、计算。

  • 更新指定字段

    SQL 复制代码
    UPDATE stu SET score = 90 WHERE id = 1; -- 将id=1的学生成绩改为90
  • 追加内容到字段

结合CONCAT()函数实现文本追加,例如给姓名添加后缀:

SQL 复制代码
UPDATE stu SET name = CONCAT(name,'_test') WHERE sex = '男';
  • 数值计算更新

例如给所有学生的成绩加5分:

SQL 复制代码
UPDATE stu SET score = score + 5;

注意事项 :务必添加WHERE子句,否则会更新表中所有数据,造成不可逆后果。

4. 删除数据:DELETETRUNCATE语句

删除数据有两种方式,分别适用于不同场景:

  • **DELETE**语句 :删除指定数据,支持WHERE子句筛选,可回滚

    SQL 复制代码
    DELETE FROM stu WHERE id = 3; -- 删除id=3的学生
    DELETE FROM stu; -- 删除所有数据,表结构保留
  • **TRUNCATE**语句:清空表中所有数据,不可回滚,且会重置自增计数器

    SQL 复制代码
    TRUNCATE TABLE stu;

区别DELETE是DML语句,可通过事务回滚;TRUNCATE是DDL语句,执行速度更快,不可回滚。

四、补充知识:MySQL存储引擎简介

存储引擎是MySQL的核心组件,决定了表的存储方式、索引结构和事务支持能力。可通过SHOW ENGINES;查看MySQL支持的存储引擎,常用的有以下两种:

  1. InnoDB :MySQL默认存储引擎,支持事务、外键约束和行级锁,适合高并发、对数据一致性要求高的场景。InnoDB表的文件包括*.frm(表结构文件)和共享表空间文件ibdata1
  2. MyISAM :不支持事务和外键,查询速度快,适合读多写少的场景。MyISAM表对应三个文件:*.frm(表结构)、*.MYD(数据文件)、*.MYI(索引文件)。

此外,还有CSV(适合数据导入导出)、MEMORY(数据存储在内存中,速度极快)等特殊存储引擎,可根据业务需求选择。

五、总结

MySQL的数据类型、运算符和单表操作是数据库的基础核心。合理选择数据类型能优化存储性能,灵活运用运算符可实现复杂数据筛选,熟练掌握CRUD操作则是实现数据管理的关键。在实际开发中,需结合业务场景,遵循"最小权限""精准筛选"的原则,写出高效、安全的SQL语句。

相关推荐
码农水水3 小时前
得物Java面试被问:消息队列的死信队列和重试机制
java·开发语言·jvm·数据结构·机器学习·面试·职场和发展
九章-3 小时前
一库平替,融合致胜:国产数据库的“统型”范式革命
数据库·融合数据库
清蒸鳜鱼3 小时前
【Mobile Agent——Droidrun】MacOS+Android配置、使用指南
android·macos·mobileagent
-Try hard-3 小时前
数据结构:链表常见的操作方法!!
数据结构·算法·链表·vim
2401_838472514 小时前
使用Scikit-learn构建你的第一个机器学习模型
jvm·数据库·python
2501_915918414 小时前
HTTPS 代理失效,启用双向认证(mTLS)的 iOS 应用网络怎么抓包调试
android·网络·ios·小程序·https·uni-app·iphone
u0109272714 小时前
使用Python进行网络设备自动配置
jvm·数据库·python
wengqidaifeng4 小时前
数据结构---顺序表的奥秘(下)
c语言·数据结构·数据库
what丶k4 小时前
SpringBoot3 配置文件使用全解析:从基础到实战,解锁灵活配置新姿势
java·数据库·spring boot·spring·spring cloud
Code blocks4 小时前
kingbase数据库集成Postgis扩展
数据库·后端