MySQL核心基础:数据类型、运算符与单表操作全解析
MySQL作为主流的关系型数据库管理系统,数据类型的合理选择、运算符的灵活运用以及单表的增删改查操作,是搭建稳定数据库架构和实现高效数据管理的基础。本文将结合实战场景,详细拆解MySQL的数据类型、运算符体系,以及单表的核心操作方法。
一、精准选型:MySQL数据类型详解
MySQL提供了丰富的数据类型,主要分为数值类型 、字符串类型 、日期时间类型三大类,不同类型对应不同的存储需求和业务场景,选对类型能大幅提升数据库性能和数据准确性。
1. 数值类型:处理数字数据的核心
数值类型分为整型和小数类型,适用于存储年龄、薪资、数量等数字类数据。
- 整型
整型包含TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,区别在于存储字节数和取值范围不同。例如TINYINT占1字节,有符号范围为-128~127,无符号范围为0~255。
整型的重要属性AUTO_INCREMENT可实现字段值自增,常用于生成唯一主键。使用时需注意,一个表只能有一个自增字段,且该字段需定义为NOT NULL并设置为PRIMARY KEY或UNIQUE。
- 小数类型
小数类型分为浮点数 (FLOAT、DOUBLE)和定点数 (DECIMAL)。浮点数存储近似值,精度较低但存储效率高;定点数以字符串形式存储,精度极高,适合存储货币、金额等对精度要求严格的数据。
定义DECIMAL(M,D)时,M表示总位数,D表示小数位数。例如DECIMAL(5,2)可存储-999.99~999.99的数值。
2. 字符串类型:存储文本与二进制数据
字符串类型用于存储姓名、地址、描述等文本信息,也可存储图片、文件等二进制数据,核心类型及特点如下:
| 类型 | 特点 | 适用场景 |
|---|---|---|
CHAR(n) |
固定长度,最多255字符,查询速度快但可能浪费空间 | 存储长度固定的数据,如手机号、身份证号 |
VARCHAR(n) |
可变长度,最多65535字符,节省空间 | 存储长度不固定的数据,如姓名、商品名称 |
TEXT系列 |
包括TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT,存储容量逐级增大 |
存储长文本,如文章内容、商品详情 |
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语句用于向表中添加新数据,支持插入单行或多行数据,语法灵活。
-
基本语法
SQLINSERT INTO 表名(字段1,字段2,...) VALUES(值1,值2,...); -
批量插入
SQLINSERT INTO stu(name,sex,math) VALUES ('张三','男',88), ('李四','女',92); -
带函数插入
可结合NOW()等函数插入动态数据,例如插入当前时间:
SQL
INSERT INTO log(content,create_time) VALUES ('测试数据',NOW());
注意事项 :字段列表和值列表必须一一对应;自增字段、允许NULL的字段、有默认值的字段可省略不写。
2. 查询数据:SELECT语句
SELECT是使用最频繁的语句,用于从表中获取数据,支持简单查询、条件查询、排序、分页等复杂操作。
-
无条件查询:查询表中所有数据或指定字段
SQLSELECT * 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子句对分组结果进行筛选,注意HAVING与WHERE的区别:WHERE筛选原始数据,HAVING筛选分组后的数据,且HAVING可使用聚合函数。
3. 更新数据:UPDATE语句
UPDATE语句用于修改表中已存在的数据,可更新单个字段、多个字段,或对字段值进行追加、计算。
-
更新指定字段
SQLUPDATE 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. 删除数据:DELETE与TRUNCATE语句
删除数据有两种方式,分别适用于不同场景:
-
**
DELETE**语句 :删除指定数据,支持WHERE子句筛选,可回滚SQLDELETE FROM stu WHERE id = 3; -- 删除id=3的学生 DELETE FROM stu; -- 删除所有数据,表结构保留 -
**
TRUNCATE**语句:清空表中所有数据,不可回滚,且会重置自增计数器SQLTRUNCATE TABLE stu;
区别 :DELETE是DML语句,可通过事务回滚;TRUNCATE是DDL语句,执行速度更快,不可回滚。
四、补充知识:MySQL存储引擎简介
存储引擎是MySQL的核心组件,决定了表的存储方式、索引结构和事务支持能力。可通过SHOW ENGINES;查看MySQL支持的存储引擎,常用的有以下两种:
- InnoDB :MySQL默认存储引擎,支持事务、外键约束和行级锁,适合高并发、对数据一致性要求高的场景。InnoDB表的文件包括
*.frm(表结构文件)和共享表空间文件ibdata1。 - MyISAM :不支持事务和外键,查询速度快,适合读多写少的场景。MyISAM表对应三个文件:
*.frm(表结构)、*.MYD(数据文件)、*.MYI(索引文件)。
此外,还有CSV(适合数据导入导出)、MEMORY(数据存储在内存中,速度极快)等特殊存储引擎,可根据业务需求选择。
五、总结
MySQL的数据类型、运算符和单表操作是数据库的基础核心。合理选择数据类型能优化存储性能,灵活运用运算符可实现复杂数据筛选,熟练掌握CRUD操作则是实现数据管理的关键。在实际开发中,需结合业务场景,遵循"最小权限""精准筛选"的原则,写出高效、安全的SQL语句。