存储过程

Mysql—存储过程

坚强是说给别人听的谎言 提交于 2020-02-11 00:51:59
存储过程   含义: 一组预先编译好的SQL语句的集合,理解成批处理语句   好处:     1、提高代码的重用性     2、简化操作     3、减少了编译次数并且减少了和数据库连接的次数,提高了效率 一、创建语法: CREATE PROCEDURE 存储过程名称(参数列表)   BEGIN     存储过程体(一组合法的SQL语句)   END   注意:  1、参数列表包含三部分     参数模式 参数名 参数类型     举例:       IN setuname VARCHAR(20)     参数模式:       IN:该参数可以作为输入, 也就是这参数需要调用方传入值       OUT:该蚕食可以作为输出,也就是该参数可以作为返回值       INOUT:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值。   2、如果存储过程中只有一条语句 BEGIN END可以省略   存储过程体重的每条SQL语句的结尾要求必须加分号   存储过程的结尾可以使用DELIMITER 重新设置   语法:     DELIMITER 结束标记     案例:     DELIMITER $    二、调用语法:   CALL 存储过程名(参数列表);     1、空参列表     案例:插入到admin表中五条记录     DELIMITER $   

SQl常用语句总结(持续更新……)

大憨熊 提交于 2020-02-09 15:23:18
创建示例数据库 USE master; GO IF DB_ID (N'mytest') IS NOT NULL DROP DATABASE mytest; GO CREATE DATABASE mytest; GO USE mytest; GO IF OBJECT_ID(N'dbo.Orders') IS NOT NULL DROP TABLE dbo.Orders; GO CREATE TABLE dbo.Orders ( ProductID INT NOT NULL, MadeFrom CHAR(20), Sales MONEY NOT NULL ); 删除数据库 use master -- 设置当前数据库为master,以便访问sysdatabases表 go if exists(select * from sysdatabases where name='stuDB') drop database stuDB go或者 IF DB_ID (N'mytest') IS NOT NULL DROP DATABASE mytest; 创建数据表 标准语法 CREATE TABLE table_name( column1 datatype, column2 datatype, column3 datatype, ..... columnN datatype, PRIMARY KEY

面试你所要知道的:MySQL存储过程

我与影子孤独终老i 提交于 2020-02-09 13:00:35
存储过程简介 SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。 存储过程的优点: (1).增强SQL语言的功能和灵活性:存储过程可以用控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2).标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 (3).较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。 (4).减少网络流量:针对同一个数据库对象的操作

数据库必知知识

不想你离开。 提交于 2020-02-08 10:40:08
1、触发器的作用: 触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2、什么是存储过程?用什么来调用? 存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。 调用: 1)可以用一个命令对象来调用存储过程。 2)可以供外部程序调用,比如:java程序。 3、存储过程的优缺点: 优点: 1)存储过程是预编译过的,执行效率高。 2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。 3)安全性高,执行存储过程需要有一定权限的用户。 4)存储过程可以重复使用,可减少数据库开发人员的工作量。 缺点:移植性差 4、存储过程与函数的区别 存储过程 1、用于在数据库中完成特定的操作或者任务(如插入、删除等) 2、程序头部声明用procedure 3、程序头部声明时不需描述返回类型可以使用in/out/in out 三种模式的参数 4、可作为一个独立的PL/SQL语句来执行 5、可以通过out/in out 返回零个或多个值 6、SQL语句(DML

数据库常见面试题

…衆ロ難τιáo~ 提交于 2020-02-08 10:35:51
1:delete和truncate有啥区别? 答:delete可以配合where语句使用,可以只删除其中某一部分,但truncate不可以;功能上truncate和不带where条件的delete语句一样,都是删除整个表的数据,但是不删除表定义,区别是,truncate删除表数据的时候既删除了数据又释放了空间,速度快,但是删除的数据无法恢复,但是delete只是删除了表中数据,但是空间没有释放,支持数据恢复,同时删除速度慢,因为在事务日志中记录删除的每一行记录 2:in 和exist 有啥区别? 答:一般来说,这两个是用来做两张(或更多)表联合查询用的,in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,假设有A、B两个表,使用时是这样的: 1、select * from A where id in (select id from B)--使用in 2、select * from A where exists(select B.id from B where B.id=A.id)--使用exists也可以完全不使用in和exists: 3、select A.* from A,B where A.id=B.id--不使用in和exists 具体使用时到底选择哪一个,主要考虑查询效率问题: 第一条语句使用了A表的索引; 第二条语句使用了B表的索引;

Oracle基础 程序包

别说谁变了你拦得住时间么 提交于 2020-02-08 05:00:26
一、程序包   程序包是一种数据库对象,它是对相关PLSQL类型、子程序、游标、异常、变量和常量的封装。程序包包含两部分内容:   1、程序包规范:可以声明类型、变量、常量、异常、游标和子程序。   2、程序包主题:可以实现在程序包规范中定义的游标、子程序。 二、程序包规范   程序包规范包含一些应用程序课件的公共对象和类型的声明它是应用程序的借口。规范包含应用程序所需的资源,如果程序包规范只声明类型、常量、变量和异常,则不需要有程序包主体。只有子程序和游标才具有程序包主体。   语法:   create [or replace] package package_name   is|as     [public type and item declations]     [subprogram specifications]   end [package_name]   说明:   package_name:包的名称。   public type and item declations:声明公共类型、常量、变量、异常和游标等。   subprogram specifications:声明PL/SQL子程序,也就是存储过程和函数。   在程序包规范中声明的项也可以再程序包之外使用。这样的项成为“公用对象”。      例: --程序包规范的声明 CREATE OR REPLACE

视图、触发器、事务、存储过程、内置函数、流程控制、索引

爱⌒轻易说出口 提交于 2020-02-08 04:43:23
视图 什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 如何用视图 create view teacher2course as select * from teacher inner join course on teacher.t.id = course.teacher_id 强调 在硬盘中,视图只有表结构文件,没有表数据文件 视图通常是用于查询,尽量不要修改视图中的数据 drop view teacher2course; 思考:开发过程中会不会去使用视图? 不会!!视图是mysql的功能,如果你的项目里面大量的是用到了视图,那意味着你后期想要扩展某个功能的时候这个功能恰巧又需要对视图进行修改,意味着你需要现在mysql端将视图先修改一下,然后再去应用程序中修改对应的sql语句,这就涉及到跨部门沟通的问题,所以通常不会使用视图,而是通过重新修改sql语句来扩展功能 触发器 ​ 在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器 为何要用触发器 触发器专门针对我们对某一张表数据增insert、删delete、改update的行为,这类行为一旦执行,就会触发触发器的执行,即自动运行另一段sql代码 创建触发器的语法 # 针对插入 create trigger tri_after

视图、触发器、事务、存储过程、函数

空扰寡人 提交于 2020-02-08 04:40:25
视图 1、什么是视图 ​ 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用就可以 2、为什么要用视图 ​ 如果要频繁使用一张虚拟表,可以不用重复查询 3、如何使用使用视图 create view teacher2course as select * from teacher inner join course on teacher.tid=course.teacher_id 强调 1、在硬盘中,视图只有表结构文件,没有表数据文件 2、视图通常用于查询,尽量不要修改视图的数据 # 删除视图 drop view teacher2course; 记住:开发过程中不会去使用视图,因为视图是mysql的功能,如果项目里面大量的使用到了视图,意味着后期想要扩张某个功能的时候这个功能恰巧又需要对视图进行修改,意味着需要先在mysql这边将视图修改,然后再去应用程序中修改对应的sql语句,这就涉及到了跨部门沟通的问题,所以通常不会使用视图,而是通过重新修改sql语句来扩展功能 触发器 在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器 为何要用触发器 ​ 触发器专门针对我们对某一张表数据增insert、删delete、改update的行为,这类行为一旦执行 ​ 就会触发触发器的执行,即自动运行另外一段sql代码 创建触发器语法 # 针对插入 create trigger

mysql的 视图、触发器、事务、存储过程、函数、索引与慢查询优化

試著忘記壹切 提交于 2020-02-08 04:32:37
视图假设有两张表学生和老师,学生表(sid,name,tid)关联老师表(tid,tname)创建视图的语法: create view 视图名 as SQL语句 实例:create view student2teacher as select * from student inner join teacher on student.tid=teacher.tid; 创建视图后会产生一个名为 student2teacher 的表,可以直接调用。 思考:开发过程中会不会去使用视图? 不会!视图是mysql的功能,如果你的项目里面大量的使用到了视图,那意味着你后期想要扩张某个功能的时候这个功能恰巧又需要对视图进行修改, 意味着你需要先在mysql这边将视图先修改一下,然后再去应用程序中修改对应的sql语句,这就涉及到跨部门沟通的问题,所以通常不会使用视图, 而是通过重新修改sql语句来扩展功能 强调 1、在硬盘中,视图只有表结构文件,没有表数据文件 2、视图通常是用于查询,尽量不要修改视图中的数据 然后说一个关于删除视图的方法 语法:DROP VIEW 视图名称 DROP VIEW student2teacher 触发器 在某张表对数据进行增删改时自动触发的功能称之为触发器 这类行为一旦执行了就会触发触发器的执行,自动运行另一段的sql代码 创建触发器的语法 # 创建两张表create

mysql数据库-进阶-长期维护

雨燕双飞 提交于 2020-02-08 01:49:08
############### 视图 ############## """ 1.视图 视图:是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据 视图有如下特点; 1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系。 2. 视图是由基本表(实表)产生的表(虚表)。 3. 视图的建立和删除不影响基本表。 4. 对视图内容的更新(添加、删除和修改)直接影响基本表。 5. 当视图来自多个基本表时,不允许添加和删除数据。 1.创建视图 create view 视图名称 as sql 查询语句 2.使用视图 select * from 视图名称; 3.更新视图 alter view 视图名称 AS SQL语句 4. 删除视图 drop view ren_view; """ ############### 触发器 ############## """ 2.触发器-trigger 触发器:监视某种情况,并触发某种操作。 触发器创建语法四要素: 1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete) 1.创建触发器语法 create trigger triggerName after/before insert/update