Mysql常用的一些数据库对象

我正在参加「金石计划」

写在前面

作为一名开发人员,我想大部分人对数据库的操作,也仅仅限于增删查改的sql语句,可能已经很少人会用到一些更深入的一些操作了。

例如:触发器,存储过程,存储函数,可能视图也会有人,偶尔会用到,其他几个估计就更少了。

最近在备考软考-数据库系统工程师,发现这些数据库对象,用的比较少,现在来回顾一下吧!!!

一、创建视图

创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。

在mysql中,可以使用create view语句来创建触发器。创建视图语句的基本语法如下:

create view <视图名> as <select 语句>

示例:

sql 复制代码
create view view_students_info
as select * from tb_students_info;

在 tb_students_info 表上创建一个名为 view_students_info 的视图

二、创建触发器

在mysql中,可以使用create trigger语句来创建触发器。创建触发器语句的基本语法如下:

create trigger trigger_name trigger_time trigger_event on table_name for each row trigger_body;

trigger_name是触发器的名称;trigger_time是触发器的执行时间,可以是before或after; trigger_event是触发器的事件,可以是insert、update或delete; table_name是触发器所在的表名,不能创建在视图上;trigger_body是触发器的SQL语句。

例如,下面的触发器在employee表上创建了一个before insert的触发器, 当有新的员工加入时,自动将入职时间设置为当前时间:

sql 复制代码
create trigger set_join_date before insert on employee for each row
begin
SET NEW.join_date = NOW();
end;

三、创建存储过程

在mysql中,可以使用create procedure语句来创建存储过程。创建储存过程语句的基本语法如下:

create procedure 存储程名([[IN|OUT|INOUT] 参数名 数据类型],[IN|OUT|INOUT] 参数名 数据类型...]]) [特性 ...] 过程体

IN:参数的值必须在调用存储过程时指定,不能被返回 OUT:该值可在存储过程内部被改变,并可返回 INOUT:调用时指定,并且可被改变和返回 过程体: 过程体的开始与结束使用BEGIN与END进行标识。 示例:

sql 复制代码
delimiter $$
create procedure test_procedure (IN name VARCHAR(30), OUT total int)
begin
select count(*) into total from students where student_name=name;
end $$
delimiter ;

delimiter $$语句可以改写 MySQL 的默认 SQL 结束标记(;)为指定字符,这是因为我们在存储过程中往往要编写多条 SQL,而这些 SQL 的结束标识都是;

而;本身又是 SQL 的结束标识,在存储过程创建语句中同样会发挥作用,这就会导致存储过程的创建语句半中被结束,必然会运行失败。

四、创建存储函数

在mysql中,可以使用create function语句来创建存储函数。创建存储函数语句的基本语法如下:

create function 函数名(参数列表) returns 返回类型 begin 方法体 end

注意: 1.参数列表 包含两部分:参数名 参数类型(输入参数,不能有输出参数) 2.函数体: 肯定会有return语句,如果没有会报错。如果return语句没有放在函数体的最后也不报错,但不建议。 3.函数体中仅有一句话,则可以省略begin end 4.使用 delimiter语句设置结束标记 5.函数有且仅有一个返回值,这点和存储过程有所区别。

sql 复制代码
delimiter $$
drop function if exists genPerson$$
create function genPerson(name varchar(20)) returns varchar(50)
begin
  declare str varchar(50) default '';
  set @tableName=name;
  set str=concat('create table ', @tableName,'(id int, name varchar(20));');
  return str;
end $$
delimiter ;

create function 创建存储函数genPerson,函数的参数是name,返回值是varchar(50)。

函数体放在begin 与 end之间。

declare 声明变量,str类型是varchar(50),默认值是空。

return返回拼接后的字符串str。

写在最后

说实话,很多东西,当你不用的时候,确实是忘得比较快。

考试,确实是一个校验基础的一个好标准,虽然无用,但是考试需要!!!

好了,继续看视频学习去了!!!


好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!

个人理解,可能也不够全面,班门弄斧了。

好了,今天就先到这里了!!!^_^

如果觉得有收获的,帮忙点赞、评论、收藏一下,再走呗!!!

相关推荐
LeeGe2 分钟前
MQ解决高并发下订单问题,实现流量削峰
后端
和平hepingfly8 分钟前
OpenAI 一统天下,联手谷歌和Cursor,开源AGENTS.md 标准,或将成为行业规范
后端
HyggeBest9 分钟前
Golang 并发原语 Sync Once
后端·go
会飞的土拨鼠呀22 分钟前
K8s部署MySQL8.0数据库
数据库·容器·kubernetes
煤球王子24 分钟前
浅学内存布局(一)
后端
oYiMiYangGuang12337 分钟前
【广告系列】流量优选
数据库
小蒜学长1 小时前
vue家教预约平台设计与实现(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端
现在就干1 小时前
还在手忙脚乱创建线程?你的服务器是否扛得住生产环境的"狂风暴雨"?
后端
得物技术1 小时前
得物新商品审核链路建设分享
后端·架构·aigc
专注VB编程开发20年1 小时前
对excel xlsx文件格式当成压缩包ZIP添加新的目录和文件后,OpenXml、NPOI、EPPlus、Spire.Office组件还能读出来吗
数据库·c#·excel