MySQL输出半径为2的面积_(二)MySQL中级篇

本文介绍了MySQL数据库中的视图、存储过程、函数和触发器的概念、优缺点及操作方法。视图可以简化操作并提高安全性,但性能较差且修改有限制。存储过程解决了SQL注入和复杂应用的维护问题。函数可以传参并返回值,但不能获取执行结果。触发器则在表的增删改操作前后执行特定行为。
摘要由CSDN通过智能技术生成

1.视图view

视图是一个虚拟表,其内容由查询定义。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。

视图的优点:

①简化了操作,把经常使用的数据定义为视图。

②安全性,用户只能查询和修改能看到的数据。

③逻辑上的独立性,屏蔽了真实表的结构带来的影响。

视图的缺点:

①性能差。

②修改限制。

A.创建视图

CREATE VIEW 视图名称 AS  SQL语句

1 CREATE VIEW stu AS SELECT * FROM student WHERE id<3;

B.删除视图

DROP VIEW view1

1 DROP VIEW stu;

C.修改视图

ALTER VIEW 视图名称 AS SQL语句

1 ALTER VIEW stu AS SELECT * FROM CLIENT;

D.使用视图

select * from v1

1 SELECT * FROM stu;

2.存储过程procedure

应用程序分为两种,一种是基于web,一种是基于桌面,他们都和数据库进行交互来完成数据的存取工作。假设现在有一种应用程序包含了这两种,现在要修改其中的一个查询sql语句,

那么我们可能要同时修改他们中对应的查询sql语句,当我们的应用程序很庞大很复杂的时候问题就出现这,不容易维护。另外把sql查询语句放在我们的web程序或桌面中很容易遭到sql注入的破坏。

而存储例程正好可以帮我们解决这些问题。

A.创建存储过程

无参的:

1 DELIMITER $$ --自定义语句结尾符号,因为这里要执行好多句sql语句,所以就得自定义,以防止出错

2

3 CREATE PROCEDUREpro1()

4 BEGIN

5 SELECT * FROMusers;

6 END$$

7

/*改回默认值 ; */delimiter ; 8 --执行存储过程

9

10 CALL pro1()

带参的:

in          仅用于传入参数用

out        仅用于返回值用

inout     既可以传入又可以当作返回值

1 --创建存储过程

2 DELIMITER $$3 CREATE PROCEDUREp1(4 IN i1 INT, --传入参数i1

5 IN i2 INT, --传入参数i2

6 INOUT i3 INT, --即传入又能得到返回值

7 OUT r1 INT --得到返回值

8 )9 BEGIN

10 DECLARE temp1 INT;11 DECLARE temp2 INT DEFAULT 0;12 SET temp1 = 1;13 SET r1 = i1 + i2 + temp1 +temp2;14 SET i3 = i3 + 100;15 END $$

1 --执行存储过程

2 --DECLARE @t1 INT default 3; -- 设置变量默认值为3

3 SET @t1=8;4 DECLARE @t2 INT; --设置变量

5 CALL p1 (1, 2 ,@t1, @t2); --执行存储过程,并传入参数,t2自动取消

6 SELECT @t1,@t2; --查看存储过程输出结果

mysql存储过程将查出来的结果集赋给一个变量

DELIMITER $$

CREATE PROCEDURE p2(OUT param INT)

BEGIN

DECLARE X INT;

SELECT COUNT(NAME) INTO X FROM table WHERE NAME='rjl';

SET param = X;

END$$

DELIMITER ;

B.删除存储过程

1 DROP PROCEDURE p1;

C.java 语言调用存储过程

3.函数function

函数也可以传参数,也可以接收返回值,但是函数没办法得到执行语句得到的结果,存储过程可以。

A.内置函数

B.自定义函数

1 DELIMITER $$2 CREATE FUNCTIONf1(3 x1 INT,4 y1 INT)5 RETURNS INT

6 BEGIN

7 DECLARE num INT;8 SET num = x1 +y1;9 RETURNnum;10 END$$11 DELIMITER ;12

13 SELECT f1(50,50);

C.删除函数:

DROP FUNCTION f1;

4.事务

事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。

1 START TRANSACTION;2 SELECT * FROMusers;3 SAVEPOINT sel;4 ***********

5 ROLLBACKsel;6 COMMIT;

5.触发器TRIGGER

——对表的行进行【增/删/改】前后的行为。触发器无法由用户直接调用,这是对表的【增/删/改】操作被动引发的。

1 # 插入前2 CREATE TRIGGER tri1 BEFORE INSERT ON tb1 FOREACH ROW3 BEGIN

4 ...5 END

6

7 # 插入后8 CREATE TRIGGER tri2 AFTER INSERT ON tb1 FOREACH ROW9 BEGIN

10 ...11 END

12

13 # 删除前14 CREATE TRIGGER tri3 BEFORE DELETE ON tb1 FOREACH ROW15 BEGIN

16 ...17 END

18

19 # 删除后20 CREATE TRIGGER tri4 AFTER DELETE ON tb1 FOREACH ROW21 BEGIN

22 ...23 END

24

25 # 更新前26 CREATE TRIGGER tri5 BEFORE UPDATE ON tb1 FOREACH ROW27 BEGIN

28 ...29 END

30

31 # 更新后32 CREATE TRIGGER tri6 AFTER UPDATE ON tb1 FOREACH ROW33 BEGIN

34 ...35 END

例一:NEW表示即将插入的数据行,OLD表示即将删除的数据行。

DELIMITER $$CREATE TRIGGER tri_before_insert BEFORE INSERT ON student FOREACH ROWBEGIN

IF new.sex = '男' THEN

UPDATE users SET qq='123456';END IF;END$$

DELIMITER ;INSERT INTO student(sex,address) VALUES('男','广东广州');

例二:

DELIMITER $$CREATE TRIGGER tri_after_delete AFTER DELETE ON student FOREACH ROWBEGIN

IF old.sex='女' THEN

INSERT INTO CLIENT(sex,address) VALUES('男','中国');END IF;END$$

DELIMITER ;DELETE FROM student WHERE sex='女';

删除触发器

DROP TRIGGER tri_before_insert;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值