码迷,mamicode.com
首页 > 数据库 > 详细

(二)MySQL中级篇

时间:2017-12-20 22:08:06      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:数据库数据   gpo   strong   问题   sele   def   table   sql注入   html   

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 PROCEDURE pro1()
 4 BEGIN
 5     SELECT * FROM users;
 6 END $$
 7 
  /* 改回默认值 ; */
  delimiter ;
8 -- 执行存储过程 9 10 CALL pro1()

 

带参的:

  • in          仅用于传入参数用
  • out        仅用于返回值用
  • inout     既可以传入又可以当作返回值
 1 -- 创建存储过程
 2 DELIMITER $$
 3 CREATE PROCEDURE p1(
 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 语言调用存储过程

  详细介绍:http://www.cnblogs.com/57rongjielong/p/7765915.html

3.函数function

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

A.内置函数

B.自定义函数

 1 DELIMITER $$
 2 CREATE FUNCTION f1(
 3     x1 INT,
 4     y1 INT)
 5 RETURNS INT
 6 BEGIN
 7     DECLARE num INT;
 8     SET num = x1 + y1;
 9     RETURN num;
10 END $$
11 DELIMITER ;
12 
13 SELECT f1(50,50);

C.删除函数:

DROP FUNCTION f1;

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

 

(二)MySQL中级篇

标签:数据库数据   gpo   strong   问题   sele   def   table   sql注入   html   

原文地址:http://www.cnblogs.com/57rongjielong/p/8075561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!