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。

写在最后

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

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

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


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

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

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

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

相关推荐
IT_陈寒1 小时前
Redis内存暴涨,没想到是AOF重写捣的鬼
前端·人工智能·后端
ikoala1 小时前
让 Codex 自己查账:一个省 token 的小技巧
前端·后端·ai编程
freejackman1 小时前
【实战二】字段级血缘追踪:拆解 AST 迷局,精准穿透函数链与子查询
大数据·数据库·sql
.痞老板.3 小时前
mysql初阶--增删改查操作
数据库·mysql
wo_jack4 小时前
C++ 入门笔记(十六):第16课 vector 模拟实现十问十答 —— 从三指针到迭代器失效
c++·后端·面试·stl·vector
量化分析码农6 小时前
【Python量化波动率实战 02】波动率会传染:EWMA 指数加权给近期行情更大话语权
后端
GISer_Jing6 小时前
如何学习Agent
后端·langchain
JWASX8 小时前
【Go】map 源码解析 - group
后端·golang·map·源码分析
lambo mercy8 小时前
AI智能租房助手
数据库
量化分析码农9 小时前
【Python量化波动率实战 01】波动率是怎么算的:年化、滚动与区间估计一次讲清
后端