视图函数存储过程和触发器和用户管理

Oracle数据库核心概念:存储过程、函数、触发器和游标 在数据库管理系统中,存储过程和函数是封装了SQL语句的子程序,它们都可以重复使用,并且可以通过参数接收输入和返回输出。存储过程与函数的主要区别在于它们的用途和返回值的不同:存储过程:是一种可以完成特定功能的SQL语句集,可以有输入参数,也可以有输出参数,但不一定必须返回值。它可以执行一系列操作,例如更新数据、插入数据、删除数据等。它们可以在数据库层面实现复杂的业务逻辑,不需要在客户端应用程序中编写代码。函数:主要用来返回一个值,而不是执行一系列的操作。 阅读详情

视图 view

MariaDB [hellodb]> create view view_stumessage as (select st.name,co.course,sc.score from students st inner join scores sc on st.stuid=sc.stuid inner join courses co on sc.courseid=co.courseid);
MariaDB [hellodb]> desc view_stumessage;
MariaDB [hellodb]> select * from view_stumessage;
MariaDB [hellodb]> show table status like 'view_stumessage'\G;

MariaDB [hellodb]> create view view_oldstudents as (select * from students where age>30);
MariaDB [hellodb]> select * from view_oldstudents;
+-------+--------------+-----+--------+---------+-----------+
| StuID | Name         | Age | Gender | ClassID | TeacherID |
+-------+--------------+-----+--------+---------+-----------+
|     3 | Xie Yanke    |  53 | M      |       2 |        16 |
|     4 | Ding Dian    |  32 | M      |       4 |         4 |
|     6 | Shi Qing     |  46 | M      |       5 |      NULL |
|    13 | Tian Boguang |  33 | M      |       2 |      NULL |
|    25 | Sun Dasheng  | 100 | M      |    NULL |      NULL |
+-------+--------------+-----+--------+---------+-----------+

//插入到了视图中,也插入到表中
MariaDB [hellodb]> insert into view_oldstudents(name,age)values('zhangsan',50);
//插入到了表中,插入视图中失败
MariaDB [hellodb]> insert into view_oldstudents(name,age)values('lisi',20);
MariaDB [hellodb]> drop view view_oldstudents;

自定义函数 UDF

MariaDB [hellodb]> create function simpleFun()returns varchar(20) return "Hello World!";
MariaDB [hellodb]> select simpleFun();
+--------------+
| simpleFun()  |
+--------------+
| Hello World! |
+--------------+

MariaDB [hellodb]> show function status\G
MariaDB [hellodb]> show create function simpleFun\G
MariaDB [hellodb]> select * from mysql.proc\G  //函数的存放位置
MariaDB [hellodb]> drop function simpleFun;
MariaDB [hellodb]> delimiter //
MariaDB [hellodb]> create function deleteById(uid smallint unsigned)returns varchar(20)
    -> begin
    -> delete from students where stuid = uid;
    -> return (select count(stuid) from students);
    -> end //
Query OK, 0 rows affected (0.00 sec)

MariaDB [hellodb]> delimiter ;

MariaDB [hellodb]> select deleteByid(10);
+----------------+
| deleteByid(10) |
+----------------+
| 26             |
+----------------+
MariaDB [hellodb]> delimiter //
MariaDB [hellodb]> create function addTwoNumber(x smallint unsigned,y smallint unsigned)
    -> returns smallint
    -> begin
    -> declare a, b smallint unsigned;  //定义局部变量
    -> set a = x, b = y;   // 为变量赋值
    -> return a+b;
    -> end //
Query OK, 0 rows affected (0.00 sec)

MariaDB [hellodb]> delimiter ;
MariaDB [hellodb]> select addTwoNumber(10,20);
+---------------------+
| addTwoNumber(10,20) |
+---------------------+
|                  30 |
+---------------------+

procedure 存储过程

MariaDB [hellodb]> delimiter //
MariaDB [hellodb]> create procedure showTime()
    -> begin
    -> select now();
    -> end //
Query OK, 0 rows affected (0.00 sec)

MariaDB [hellodb]> delimiter ;
MariaDB [hellodb]> call showTime;
+---------------------+
| now()               |
+---------------------+
| 2020-01-23 21:09:24 |
+---------------------+

MariaDB [hellodb]> show procedure status\G
MariaDB [hellodb]> delimiter //
MariaDB [hellodb]> create procedure selectById(in uid smallint unsigned)
    -> begin
    -> select * from students where stuid = uid;
    -> end //
Query OK, 0 rows affected (0.00 sec)

MariaDB [hellodb]> delimiter ;
MariaDB [hellodb]> call selectById(9);
+-------+--------------+-----+--------+---------+-----------+
| StuID | Name         | Age | Gender | ClassID | TeacherID |
+-------+--------------+-----+--------+---------+-----------+
|     9 | Ren Yingying |  20 | F      |       6 |      NULL |
+-------+--------------+-----+--------+---------+-----------+
MariaDB [hellodb]> delimiter //
MariaDB [hellodb]> create procedure dorepeat(n int)
    -> begin
    -> set @i = 0;
    -> set @sum = 0;
    -> repeat set @sum = @sum+@i;set @i = @i +1;
    -> until @i > n end repeat;
    -> end //
Query OK, 0 rows affected (0.00 sec)

MariaDB [hellodb]> delimiter ;
MariaDB [hellodb]> call dorepeat(100);
Query OK, 0 rows affected (0.00 sec)

MariaDB [hellodb]> select @sum;
+------+
| @sum |
+------+
| 5050 |
+------+
MariaDB [hellodb]> delimiter //
MariaDB [hellodb]> create procedure deleteById(in uid smallint unsigned, out num smallint unsigned)
    -> begin
    -> delete from students where stuid >=uid;
    -> select row_count() into num;
    -> end//
Query OK, 0 rows affected (0.00 sec)

MariaDB [hellodb]> delimiter ;
MariaDB [hellodb]> call deleteById(12,@Line);
Query OK, 1 row affected (0.01 sec)

MariaDB [hellodb]> select @Line;
+-------+
| @Line |
+-------+
|    16 |
+-------+

trigger 触发器

MariaDB [hellodb]> create table student_info(
    -> stu_id int(11) not null auto_increment,
    -> stu_name varchar(255) default null,
    -> primary key(stu_id)
    -> );
MariaDB [hellodb]> create table student_count(
    -> student_count int(11) default 0
    -> );
MariaDB [hellodb]> insert into student_count values(0);

MariaDB [hellodb]> create trigger trigger_student_count_insert
    -> after insert
    -> on student_info for each row
    -> update student_count set student_count=student_count+1;
MariaDB [hellodb]> create trigger trigger_student_count_delete
    -> after delete
    -> on student_info for each row
    -> update student_count set student_count=student_count-1;

MariaDB [hellodb]> insert into student_info values(1,'a');
Query OK, 1 row affected (0.00 sec)

MariaDB [hellodb]> select * from student_info;
+--------+----------+
| stu_id | stu_name |
+--------+----------+
|      1 | a        |
+--------+----------+
1 row in set (0.00 sec)

MariaDB [hellodb]> select * from student_count;
+---------------+
| student_count |
+---------------+
|             1 |
+---------------+
MariaDB [hellodb]> show triggers\G
MariaDB [hellodb]> select * from information_schema.triggers\G
MariaDB [hellodb]> drop trigger trigger_student_count_insert;
MariaDB [hellodb]> drop trigger trigger_student_count_delete;

用户账号和权限管理

MariaDB [mysql]> select user,host,password from user;
+------+----------------+----------+
| user | host           | password |
+------+----------------+----------+
| root | localhost      |          |
| root | centos7-19.com |          |
| root | 127.0.0.1      |          |
| root | ::1            |          |
|      | localhost      |          |
|      | centos7-19.com |          |
+------+----------------+----------+

版本高的数据库密码存放在 mysql.user.authentication_string字段中
MariaDB [mysql]> create user test@'192.168.209.%' identified by 'centos';
-- 连接远程数据库主机
[root@Centos6-9 ~]# mysql -utest -pcentos -h 192.168.209.19 -P3306 
MariaDB [mysql]> rename user test@'192.168.209.%' to alice@'192.168.209.%';//改名
MariaDB [mysql]> drop user ''@'centos7-19.com'; // 删除用户
MariaDB [mysql]> set password for 'root'@'localhost'=password('centos'); //设置密码
[root@centos7-19 ~]# mysql -uroot -pcentos   //默认以 root@localhost

[root@centos7-19 ~]# mysql -uroot -p123 -h 127.0.0.1  //不能登陆到数据库,作反向解析了
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
skip_name_resolve 写入到配置文件中重启,root@127.0.0.1 就可以登陆了

MariaDB [mysql]> update user set password=password('123') where user='root' and host='centos7-19.com'; //修改密码
MariaDB [mysql]> flush privileges;

-- 忘记了数据库root的密码怎么办?
[root@centos7-19 ~]# vim /etc/my.cnf //修改,重启生效
[mysqld]
skip-grant-tables
skip-networking
关闭了3306端口号,只能本地连接数据库,不用密码
然后修改mysql.user.password字段的值或重新设置密码
删除配置文件/etc/my.cnf以上两行,重新启动数据库

-- 创建用户并授权
MariaDB [hellodb]> grant all on hellodb.* to test@'192.168.209.29' identified by '123';
-- 查看权限
MariaDB [hellodb]> show grants for test@'192.168.209.29';
MariaDB [hellodb]> show grants for current_user();
-- 取消删除的权限
MariaDB [hellodb]> revoke delete on hellodb.* from test@'192.168.209.29';
MariaDB [hellodb]> revoke drop on hellodb.* from test@'192.168.209.29';
关于自制的《航空学报》latex模板(非官网模板) 《航空学报》的官网只提供了word模板,并且该期刊投稿只需要pdf版本不需要源文件。为方便latex爱好者撰写论文,提供该模板及说明给广大科研人士~ 阅读详情

相关推荐

EDEM在农业机械设计中的实战应用:以谷物收割机优化为例

本文以谷物收割机优化为例,详细阐述了EDEM离散元仿真软件在农业机械设计中的实战应用。通过构建精准的“数字谷物”模型与农机部件动态界面,利用GPU加速完成大规模颗粒系统仿真,有效诊断并解决了籽粒夹带损失与清选负荷不均等田间难题,实现了从仿真分析到田间验证的设计优化闭环。

weixin_29256771的博客 108

视图的基本操作和用户管理

文章目录一、视图基本操作创建视图修改视图删除视图二、用户管理查看用户信息创建用户语法语句删除用户语法语句修改用户密码改自己密码root 用户更改其他用户密码三、权限授权回收权限 一、视图基本操作 创建视图 create view 视图名 as select语句; //创建视图 create view shitu as select ename,sal from emp where emp...

melody_1016的博客 1078

SimpleITK图像基础(一)——3D Resampling

文章目录前言基于SimpleITK进行实现 前言 进入深度学习网络之前需要进行统一数据集,这个时候需要对这些数据集进行重新采样,即假设各向同性体素并重新定向它们,以便可以读取所有图像的像素矩阵。 在将方位变换成一致时,可以用DICOMOrientImageFilter过滤器,可以将 DesiredCoordinateOrientation设置为你想要变换的方位,它将计算出所需的置换顺序并根据需要执行翻转以接近所需方向。 基于SimpleITK进行实现 workflow如下: step 1:首先运行DICOM

YYY_77的博客 2019

第二十三章 MySQL数据库 手册4 视图、函数、存储过程、流程控制、触发器、用户和权限管理

第二十三章 MySQL数据库实验手册实验手册4视图、函数、存储过程、流程控制、触发器、用户和权限管理实验四:视图、函数、存储过程、流程控制、触发器、⽤户和权限管理 实验四:视图、函数、存储过程、流程控制、触发器、⽤户和权限管理 ⽬的 视图、函数、存储过程、流程控制、触发器、用户和权限管理,管理数据库。 前提 linux系统,已安装好数据库。 安装mariadb 7 ~]# vim /etc/yum.repos.d/mariadb-10.2.repo # MariaDB 10.2 CentOS

Soul_2016的博客 429

Claude Code 里的 MCP 连接失败到底在报什么

文档还说明,HTTP 类型、stdio 类型等 MCP server 的接入方式不同,stdio server 会被 Claude Code 当作本地进程拉起,而 HTTP server 则需要 Claude Code 去访问一个已经存在的 HTTP endpoint。把这段输出翻成更接地气的运维语言,就是 Claude Code 已经知道我们想接两个外部能力,一个是 SAP ADT 官方 MCP,一个是 Chrome DevTools MCP,但当前没有一个完成握手。,因为它的信号更明确。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 146

大津法(OTSU)点云强度信息分割

大津法(OTSU)是一种灰度图像自适应的阈值分割方法,大津法根据图像的灰度分布,将图像分成背景和前景两部分,前景就是需要按照阈值分割出来的部分。由于点云的强度信息的特性,也可以利用此方法进行分类,但需要保证信息干扰较少,例如道路标线分割等场景较为适用。

qq_48694523的博客 965

触发器、视图和存储过程

一、触发器 1、概念 触发器用来在某些操作时,“自动”执行一些操作。 当insert、delete、update设置触发器之后,执行insert、delete、update操作就会自动触发设置的内容(一张表最大能有6个触发器)。 2、语法 create trigger 触发器名 before|after 事件 on 表名 for each row 触发器语句; 触发器名建议为trigger_xxx,这样便于区分,触发器名不能重复。 before|after 代表触发器语句执行时间,如果是b

djyjx的博客 1234

手把手教你学PCIE-- 热插拔电路设计与实现方案

PCIe热插拔(Hot-Plug)技术允许用户在系统运行时安全地插入或移除设备,而无需重启系统。本文将深入讲解热插拔电路的设计要点、关键器件选型及信号协议规范,涵盖机械结构、电气保护和电源管理三大核心模块。​。

MHD0815的博客 440

oracle查看所有对象(表、视图、索引、函数、存储过程等)的详细参数和注释,DDL定义语句

--所有对象(表、视图、索引、函数等) select * from sys.dba_objects where OWNER='AMIX' order by OBJECT_TYPE,OBJECT_NAME; --所有对象(表、视图、索引、函数等) select * from sys.all_objects where OWNER='AMIX' order by OBJECT_TYPE,OBJ...

【小石头的茅坑】 72万+

XXL-Job 分布式定时任务

XXL-JOB是一款轻量级分布式定时任务调度框架,采用调度中心与执行器分离架构,解决单机任务宕机、重复执行等问题。核心模块包括调度中心(管理任务配置、触发调度)和执行器(执行任务逻辑),支持集群部署保证高可用。框架提供丰富的任务触发规则、路由策略、阻塞策略及完善的运维能力,适用于多种业务场景如数据同步、定时推送等。安装时需准备MySQL数据库并初始化表结构,通过Docker部署调度中心服务。相比其他定时框架,XXL-JOB具有轻量化、可视化等优势,是中小企业的首选方案。

郭宝的博客 699

爬取Unsplash高清壁纸:Python爬虫实战教程(最新技术)

在当今数字化时代,高清壁纸已经成为人们个性化设备的重要元素。Unsplash作为全球最知名的免费高质量图片网站,汇集了数百万张由全球摄影师贡献的高清图片。然而,Unsplash官网的下载方式需要手动操作,对于需要批量下载壁纸的用户来说效率较低。本文将带你深入探索如何使用Python爬虫技术高效爬取Unsplash高清壁纸,从基础到进阶,全面掌握图片爬取的核心技术。Unsplash成立于2013年,是一个完全免费的图片分享平台。高质量内容:所有图片均由专业摄影师上传,分辨率普遍达到4K以上免费商用。

2201_76125261的博客 935

获取mysql存储过程返回值_MySQL函数,存储过程,用户管理

1. 视图一张虚拟表,就是将一个经常被使用的查询作为一个虚拟表,开发者查询的时候不需要再次书写SQL,而是直接调用对应的视图就可,调用视图以后MySQL会执行这个查询SQL。# 创建视图 create view vi_select as select * from emps ; # 创建或者代替已有视图 create or replace view vi_select as select * fr...

weixin_39662432的博客 500

Autosar MCAL-S32K324 Fls配置-基于EB

Autosar MCAL Flash配置,基于S32K324,EB软件

赞的博客 1514

MySQL触发器、存储过程、自定义函数、视图 常用SQL

1.建立一个userinfo表新增记录时的触发器 将新增日志加入到userinfolog 2.建立一个向userinfo表新增记录的存储过程 3.根据userinfo表的出生日期字段 我们将建立一个简单算得年龄的自定义函数 4...

chisheyang0074的博客 152

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

笔记总结:MySQL——存储过程、函数、触发器、视图

MySQL存储过程,函数,触发器,视图总结

lzf240286的博客 182

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Mysql 存储过程、函数、触发器和视图的权限检查

当存储过程、函数、触发器和视图创建后,不单单创建者要执行,其它用户也可能需要执行,换句话说,执行者有可能不是创建者本身,那么在执行存储过程时,MySQL是如何做权限检查的? 在默认情况下,MySQL将检查创建者的权限。假设用户A创建了存储过程p()访问表T,并把execute的权限赋给了B,即使用户B没有访问表T的权限,也能够通过执行存储过程p()访问表T。 下面看一个例子: 首先...

weixin_30839881的博客 84

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

mysql 存储过程锁_mysql的存储过程,函数,事件,权限,触发器,事务,锁,视图,导入导出...

1.创建过程1.1 简单创建--创建员工表DROP TABLE IF EXISTSemployee;CREATE TABLEemployee(idint auto_increment primary key,`name`varchar(50),depidint);insert into employee(name,depid) values('vic',1),('myvic',2),('liu',...

weixin_42619448的博客 324

MySQL 用户管理

是事件动作(event action ),这是事件启动时执行的代码,事件的动作包含一条 SQL 语句,它可能是一个简单地insert或者update语句,也可以使一个存储过程或者 benin...end 语句块,这两种情况允许我们执行多条 SQL。一个事件可以是活动(打开)的或停止(关闭)的,活动意味着事件调度器检查事件动作是否必须调用,停止意味着事件的声明存储在目录中,但调度器不会检查它是否应该调用。在一个事件创建之后,它立即变为活动的,一个活动的事件可以执行一次或者多次。

Toasten 967

MySQL视图,触发器,函数,存储结构

基于用户权限管理 参考表结构: 用户信息 id username pwd 1 alex 123123 权限 1 订单管理 2 用户劵 3 Bug管理 .... 用户类型&权限 1 1 1 2 2 1 3 1 程序: 用...

weixin_30449453的博客 92

sqlserver-判断存储过程、触发器、视图是否存在并删除

[转]判断存储过程、触发器、视图是否存在并删除 看代码应该是SQL Server的,以后再整理MySql的版本 1、判断是否存在addOneArticle这个存储过程 if Exists(select name from sysobjects where NAME = 'addOneArticle' and type='P') drop procedure addOneArticle 2、...

cxu123321的博客 1654

MySQL进阶:视图&存储过程&触发器

用户自己定义的变量,只在当前连接有效。

qq_39251549的博客 145

SQL SERVER 判断是否存在并删除某个数据库、表、视图、触发器、储存过程、函数...

-- SQL SERVER 判断是否存在某个触发器、储存过程 -- 判断储存过程,如果存在则删除IF (EXISTS(SELECT * FROM sysobjects WHERE name='procedurename' AND type='P')) DROP PROCEDURE procedurename -- 判断触发器,如果存在则删除IF (EXISTS(SELECT * FROM sy...

weixin_30549657的博客 190

STLG_02_07_T-SQL :视图|触发器|存储过程|自定义函数

T-SQL 中的视图是基于查询结果的虚拟表,简化复杂查询和数据访问,常用于数据安全性和逻辑隔离;存储过程是预编译的 SQL 代码块,用于提高执行效率、减少网络传输并支持复杂逻辑;触发器是在特定数据操作(如插入、更新或删除)发生时自动执行的特殊存储过程,常用于数据完整性和审计;函数是用户自定义的代码块,可返回标量值或表结构,常用于封装复杂的计算逻辑或数据处理操作。这四者共同增强了 T-SQL 的灵活性和功能性,支持复杂的数据库操作需求。

cdlislxjt的博客 365

在 Navicat Premium 中管理 MySQL 用户 | 第 4 部分:权限管理员工具

管理数据库用户是数据库管理员(DBA)的主要职责之一。协调组织中的用户访问数据库的方式通常需要执行许多单独的任务,包括添加新用户,阻止已离开组织的用户的访问权限以及帮助无法登录的用户。本系列文章共有 4 篇,文中深入浅出地传授给用户如何保护 root 账号,创建新用户、配置用户授权以及权限管理员工具等具体操作步骤以及需要注意的事项。

Navicat 官方账号 1309
上一篇: mysql多表查询
下一篇: 备份数据库到最新位置
studywinwin
博客等级 码龄7年 18粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值