目录
3️⃣截取字符串:left(str,len)、right(str,len)、substring(str,pos,len)
4️⃣去除空格:ltrim(str)、rtrim(str)、trim(str)
十三、MySQL常用内置函数
聚合函数是标准的SQL语言,但本章节不是标准SQL语言的一部分 ,只是针对MySQL可用。
1、字符串函数
1️⃣拼接字符串:concat(str1,str2,…)
concat(参数1,参数2,…) :括号里的参数可以是数字也可以是字符串,把所有参数连接成一个完整的字符串。
--把12,34,'ab'拼接成一个字符串'1234ab',并显示出来
select concat(12,34,'ab');
2️⃣包含字符个数:length(str)
如果字符串中包含utf8格式的汉字,一个汉字length返回3。
-- 计算字符串abc的长度
select length('abc'); --返回3
select length('我和你a'); --返回10
注意:聚合函数不能在where中使用,但是mysql内置函数可以在where中使用
-- 查询名字长度等于9(三个utf8格式的汉字)的学生信息
select * from students where length(name) = 9;
3️⃣截取字符串:left(str,len)、right(str,len)、substring(str,pos,len)
- left(str,len)返回字符串str的左端len个字符,中文于英文个数len一致
-- 截取字符串'我和你abc'的左端三个字符
select left('我和你abc',3) --返回'我和你'
- left(str,len)返回字符串str的左端len个字符,中文于英文个数len一致
-- 截取字符串'我和你abc'的右端三个字符
select right('我和你abc',3) --返回'abc'
- substring(str,pos,len)返回字符串str的位置pos起len个字符,pos从1开始计数
-- 截取字符串'我和你abc'从第2个字符开始的3个字符
select substring('我和你abc',2,3) --返回'和你a'
- 内置可以用在select显示的字段名中
-- 截取students表中所有学生的姓
select left(name,1) from students;
4️⃣去除空格:ltrim(str)、rtrim(str)、trim(str)
- ltrim(str)返回删除左侧空格的字符串str
-- 去除字符串' abc'左侧的空格
select ltrim(' abc'); --返回'abc'
- rtrim(str)返回删除右侧空格的字符串str
-- 去除字符串'abc '右侧的空格
select rtrim('abc '); --返回'abc'
select concat(rtrim('abc '),'测试字符') --返回'abc测试字符'
- trim(str)返回删除左右两侧空格的字符串str
-- 去除字符串' abc '两侧的空格
select rtrim(' abc '); --返回'abc'
2、数字函数
1️⃣求四舍五入值:round(n,d)
round(n,d):n表示原数,d表示小数位置,省略d默认为d=0
-- 1.653四舍五入,保留整数位
select round(1.653); -- 返回2
-- 查询学生的平均年龄,并四舍五入保留两位小数
select round(avg(age),2) from students;
2️⃣随机数:rand()、order by rand()
- rand():产生值为0-1的浮点数
-- 返回随机的0-1的浮点数
select rand();
- order by rand():使用order by rand()实现随机排序
从学生表中随机抽取一个学生
select * from students order by rand() limit 1
3、日期时间函数
1️⃣当前日期:current_date()
select current_date(); --显示当前日期:2024-12-19
2️⃣当前时间:current_time()
select current_time(); --显示当前时间:09:55:46
3️⃣同时返回当前时间和日期:now()
select now(); --显示当前日期和时间:2024-12-19 09:55:46
十四、存储过程:procedure
存储过程procedure,也翻译为存储程序,是一条或者多条sql语句的集合。
1、创建存储过程
-- 语法
create procedure 存储过程名称(参数列表)
begin
sql语句;
end
2、使用存储过程
call 存储过程名称(参数列表);
3、删除存储过程
drop procedure 存储过程名称;
drop procedure if exists 存储过程名称;
十五、视图:view
1、定义
- 对于复杂的查询,在多个地方使用,如果需求发生了变化,需求需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦;
- 解决:定义视图;
视图是 SQL 中的一种只读的虚拟表,可以它是基于某些查询结果而创建的,是对select语句的封装和抽象,视图并不实际存储数据,而是只存储select语句,当访问视图时,会动态地执行其对应的查询。对该虚拟表是只读的,不能修改。
2、创建视图
-- 语法
create view 视图名称 as select 语句;
-- 创建视图,名为stu_nan,查询所有男生信息
create view stu_nan as
select * from students where sex='男';
3、 使用视图
当作一个表来使用
-- 语法
select * from 视图名;
select * from stu_nan; -- 因为视图本身就是一张表,所以可以查询
select * from stu_nan
inner join scores on stu_nan.studentNo=scores.studentNo;
4、删除视图
drop view 视图名字;
drop view if exists 视图名字;
十六、事务:begin、rollback、commit
1、为什么要有事务
2、什么是事务
- 事务是一个操作序列,是多条更改数据库操作的sql语句集合,这些操作要么全部成功,要么全部失败,是一个不可分割的工作单位。
- 事务的目的是保证数据的一致性和完整性,即使在出现错误或故障时,也能维护数据库的可靠性。
事务不仅可以包含修改(UPDATE
)、删除(DELETE
)语句,也可以包含查询(SELECT
)和插入(INSERT
)语句。通过事务,可以确保这些操作的一致性和可靠性。
3、事务的操作
- 开启事务:开启事务后执行修改update或者delete语句(通常),变更会写道缓存中,而不会立刻生效
begin;
- 回滚事务:放弃修改
rollback;
- 提交事务:修改生效,操作作用到了真实数据中
commit;
【注意】
- 没有写begin代表没有事务,没有事务的表操作都是实时生效的。
- 如果只写了begin,没有rollback,也没有commit,系统推出的结果是rollback。
- 只有在事务中执行了
COMMIT
,事务中的修改才会永久写入数据库并对其他用户可见。如果事务未成功提交,无论是手动执行了ROLLBACK
还是由于错误或断电等意外导致事务中断,数据库会将事务的所有操作回滚到开始事务之前的状态。
十七、索引 :index
1、什么是索引
- 索引是数据库中用于加速数据查询的特殊数据结构。它类似于书的目录,可以快速定位数据在表中的位置,而无需逐行扫描整个表。
- 上万条数据就需要用到索引。此时如果没有索引,select语句的效率会非常低。
2、创建索引
-- 语法
create index 索引名称 on 表名(字段名称(长度));
- 如果指定字段是字符串,需要指定长度,建议长度与定于字段时的长度一致;
- 字段类型如果不是字符串,可以不填写长度部分
3、使用索引
无需用语句显式使用,只要where后面的相关字段建立了索引,系统会自动调用对应索引。
4、查看索引
-- 语法
show index from 表名;
创建主键时,系统会给主键自动建立索引 ,所以查询主键的效率很高。
5、删除索引
-- 语法
drop index 索引名称 on 表名;
主键的索引不能直接删除,因为它与主键约束关联。
6、索引的优缺点
全部内容:
MySQL数据库02|去重、条件查询、排序、聚合函数、分组、分页显示-CSDN博客