1.视图view

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

视图的优点:

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

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

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

视图的缺点:

①性能差。

②修改限制。

A.创建视图

CREATE VIEW 视图名称 AS  SQL语句

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

B.删除视图

DROP VIEW view1

 DROP VIEW stu;

C.修改视图

ALTER VIEW 视图名称 AS SQL语句

 ALTER VIEW stu AS SELECT * FROM CLIENT;

D.使用视图

select * from v1

 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     既可以传入又可以当作返回值
 -- 创建存储过程
DELIMITER $$
CREATE PROCEDURE p1(
IN i1 INT, -- 传入参数i1
IN i2 INT, -- 传入参数i2
INOUT i3 INT, -- 即传入又能得到返回值
OUT r1 INT -- 得到返回值
)
BEGIN
DECLARE temp1 INT;
DECLARE temp2 INT DEFAULT 0;
SET temp1 = 1;
SET r1 = i1 + i2 + temp1 + temp2;
SET i3 = i3 + 100;
END $$
 -- 执行存储过程
-- DECLARE @t1 INT default 3; -- 设置变量默认值为3
SET @t1=8;
DECLARE @t2 INT; -- 设置变量
CALL p1 (1, 2 ,@t1, @t2); -- 执行存储过程,并传入参数,t2自动取消
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.删除存储过程

 DROP PROCEDURE p1;

C.java 语言调用存储过程

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

3.函数function

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

A.内置函数

B.自定义函数

 DELIMITER $$
CREATE FUNCTION f1(
x1 INT,
y1 INT)
RETURNS INT
BEGIN
DECLARE num INT;
SET num = x1 + y1;
RETURN num;
END $$
DELIMITER ; SELECT f1(50,50);

C.删除函数:

DROP FUNCTION f1;

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

 START TRANSACTION;
SELECT * FROM users;
SAVEPOINT sel;
***********
ROLLBACK sel;
COMMIT;

5.触发器TRIGGER

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

 # 插入前
CREATE TRIGGER tri1 BEFORE INSERT ON tb1 FOR EACH ROW
BEGIN
...
END # 插入后
CREATE TRIGGER tri2 AFTER INSERT ON tb1 FOR EACH ROW
BEGIN
...
END # 删除前
CREATE TRIGGER tri3 BEFORE DELETE ON tb1 FOR EACH ROW
BEGIN
...
END # 删除后
CREATE TRIGGER tri4 AFTER DELETE ON tb1 FOR EACH ROW
BEGIN
...
END # 更新前
CREATE TRIGGER tri5 BEFORE UPDATE ON tb1 FOR EACH ROW
BEGIN
...
END # 更新后
CREATE TRIGGER tri6 AFTER UPDATE ON tb1 FOR EACH ROW
BEGIN
...
END

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

DELIMITER $$
CREATE TRIGGER tri_before_insert BEFORE INSERT ON student FOR EACH ROW
BEGIN
IF new.sex = '男' THEN
UPDATE users SET qq='';
END IF;
END $$
DELIMITER ; INSERT INTO student(sex,address) VALUES('男','广东广州');

例二:

DELIMITER $$
CREATE TRIGGER tri_after_delete AFTER DELETE ON student FOR EACH ROW
BEGIN
IF old.sex='女' THEN
INSERT INTO CLIENT(sex,address) VALUES('男','中国');
END IF;
END$$
DELIMITER ; DELETE FROM student WHERE sex='女';

删除触发器

DROP TRIGGER tri_before_insert;

(二)MySQL中级篇的更多相关文章

  1. Python学习日记(四十二) Mysql数据库篇 十

    前言 当我们自己去写SQL代码的时候有时候会因为不熟练会导致效率低,再之后要进行许多的优化,并且操作也较为繁琐.因此ORM框架就能够解决上面的问题,它能根据自身的一些规则来帮助开发者去生成SQL代码. ...

  2. Kotlin——中级篇(二): 属性与字段详解

    在前面的章节中,详细的为大家讲解到了Kotlin中对类的类的定义.使用.初始化.初始化.类继承等内容,但是在一个类中,几乎上是不可能不出现属性与字段(field)的,这一篇文章就为大家奉上Kotlin ...

  3. MySQL优化篇系列文章(二)——MyISAM表锁与InnoDB锁问题

    我可以和面试官多聊几句吗?只是想... MySQL优化篇系列文章(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. 面试官:咦,小伙子,又来啦 ...

  4. Python 正则表达式入门(中级篇)

    Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...

  5. django-url调度器-中级篇

    在初级篇中,我们接触了: 1.url 的简单编写 2.两种传参的方式 3.捕获的参数总是字符串 4.为视图设置默认参数 …… 在中级篇中将更进一步. 包含其它的URLconfs 当网站非常大的时候,将 ...

  6. Python 第六篇(中):面向对象编程中级篇

    面向对象编程中级篇: 编程思想概述: 面向过程:根据业务逻辑从上到下写垒代码  #最low,淘汰 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 #混口饭吃 def add(ho ...

  7. Linux配置mysql (centos配置java环境 mysql配置篇 总结四)

    ♣安装的几种方法和比较 ♣配置yum源 ♣安装mysql ♣启动mysql ♣修改密码 ♣导入.sql文件 ♣缓存设置 ♣允许远程登录(navicat) ♣配置编码为utf8  1.关于Linux系统 ...

  8. 第二章 MySQL入门篇

    第一章 MySQL入门篇 一.MySql简介 简言: 和SQL Server数据库相同,MySQl也是一个关系型数据库管理系统.由瑞典的MySQL AB公司开发,2008年被SUN公司收购,2009年 ...

  9. Kotlin——从无到有系列之中级篇(四):面向对象的特征与类(class)继承详解

    如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索 QQ群号:497071402 进入正题 在前面的章节中,详 ...

随机推荐

  1. IAR新建MSP430工程

    一.在IAR官网下载IAR for MSP430 软件 https://www.iar.com/iar-embedded-workbench/#!?architecture= 选择MSP430,然后 ...

  2. 基于opencv和qt的人脸检测小系统

    摘要:利用opencv读取视频.图片并检测人脸,利用QT显示窗口,功能选择等 环境:Ubuntu18.04.OpenCV3.4.0.QT5.10.1 效果图: 代码如下(比较简单没什么注释): mai ...

  3. python学习笔记:第8天 文件操作

    目录 1. 文件操作介绍 2. 文件操作的几种方式 3. 文件的操作的方法 1. 文件操作介绍 说到操作文件我们肯定会想到流,文件的操作都是通过流来操作的.在python中文件的操作非常简单,并不像J ...

  4. MATLAB中常用函数及语法

    zeros() 1 zeros(n):n*n 全零矩阵 2 zeros(m,n):m*n全零矩阵 3 zeros(d1,d2,d3……dn):生成 d1*d2*d3*……*dn 全零矩阵或数组. 4 ...

  5. scala (1) for 循环

    scala if  else 判断 (1)在scala中末尾不需要添加 分号 作为语句的终结符.  val  name = "Leo" (2)  在 scala 中 if else ...

  6. HyperLedger Fabric 1.4 区块链技术原理(2.2)

    区块链从字面上理解:数据记录在区块中,通过一定的算法把区块连成一个链.       区块链通过哈希(Hash)算法,生成一串字符串,保存在区块的头部中,一个的区块通过指向上一个Hash值,加入到区块链 ...

  7. DotNetty学习笔记

    DotNetty项目本身的示例很容易运行起来,但是具体到真实的应用场景,还是需要进一步理解DotNetty的通道处理细节,这样才能够在实际项目应用中处理具体的问题. 简单的场景下会有以下几个问题,第一 ...

  8. 20155220java实验二 面向对象程序设计 实验报告

    一.实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步骤 (一)单元测试 (1) 三种代码 伪代码 产 ...

  9. [arc082E]ConvexScore-[凸包]

    Description 传送门 Solution em又是神仙题. 考虑到目前的一个凸包,顶点点集为S. 现在在它内部或边缘上的点集为T,则贡献为2|T|−|S|,设从T中去掉S的点后得到了集合A.则 ...

  10. Dlib简介及在windows7 vs2013编译过程

    Dlib是一个C++库,包含了许多机器学习算法.它是跨平台的,可以应用在Windows.Linux.Mac.embedded devices.mobile phones等.它的License是Boos ...