MySQL数据库04|内置函数、存储过程、视图、事务、索引

发布于:2024-12-20 ⋅ 阅读:(12) ⋅ 点赞:(0)

目录

十三、MySQL常用内置函数

 1、字符串函数

1️⃣拼接字符串:concat(str1,str2,…)

2️⃣包含字符个数:length(str)

3️⃣截取字符串:left(str,len)、right(str,len)、substring(str,pos,len)

4️⃣去除空格:ltrim(str)、rtrim(str)、trim(str)

2、数字函数

1️⃣求四舍五入值:round(n,d)

2️⃣随机数:rand()、order by rand()

3、日期时间函数

1️⃣当前日期:current_date()

2️⃣当前时间:current_time()

3️⃣同时返回当前时间和日期:now()

十四、存储过程:procedure

1、创建存储过程

2、使用存储过程

3、删除存储过程

十五、视图:view

1、定义

2、创建视图

3、 使用视图

4、删除视图

十六、事务:begin、rollback、commit

1、为什么要有事务

2、什么是事务

3、事务的操作

十七、索引 :index

1、什么是索引

2、创建索引

3、使用索引

4、查看索引

5、删除索引

6、索引的优缺点


十三、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
第8行插入的是固定时间,第9行插入的就是当前时间

十四、存储过程:procedure

存储过程procedure,也翻译为存储程序,是一条或者多条sql语句的集合。

1、创建存储过程

-- 语法
create procedure 存储过程名称(参数列表)
begin
sql语句;
end

2、使用存储过程

call 存储过程名称(参数列表);
字符界面下需要delimiter

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;

【注意】

  1. 没有写begin代表没有事务,没有事务的表操作都是实时生效的。
  2. 如果只写了begin,没有rollback,也没有commit,系统推出的结果是rollback。
  3. 只有在事务中执行了 COMMIT,事务中的修改才会永久写入数据库并对其他用户可见。如果事务未成功提交,无论是手动执行了 ROLLBACK 还是由于错误或断电等意外导致事务中断,数据库会将事务的所有操作回滚到开始事务之前的状态。

十七、索引 :index

1、什么是索引

  • 索引是数据库中用于加速数据查询的特殊数据结构。它类似于书的目录,可以快速定位数据在表中的位置,而无需逐行扫描整个表。
  • 上万条数据就需要用到索引。此时如果没有索引,select语句的效率会非常低。

2、创建索引

-- 语法
create index 索引名称 on 表名(字段名称(长度));
  • 如果指定字段是字符串,需要指定长度,建议长度与定于字段时的长度一致;
  • 字段类型如果不是字符串,可以不填写长度部分 

3、使用索引

无需用语句显式使用,只要where后面的相关字段建立了索引,系统会自动调用对应索引。

 ​

4、查看索引

-- 语法
show index from 表名;

创建主键时,系统会给主键自动建立索引 ,所以查询主键的效率很高。

5、删除索引

-- 语法
drop index 索引名称 on 表名;

 主键的索引不能直接删除,因为它与主键约束关联。

6、索引的优缺点

 

 全部内容:

MySQL数据库01|增删改查、字段的约束-CSDN博客

MySQL数据库02|去重、条件查询、排序、聚合函数、分组、分页显示-CSDN博客

MySQL数据库03|内置函数、存储过程、视图、事务、索引-CSDN博客

MySQL数据库04|内置函数、存储过程、视图、事务、索引-CSDN博客