存储过程

Python面试刷题day01(DB面试题01-05)

余生长醉 提交于 2019-12-20 08:28:49
目录 MySQL基础 SQL语言处理代码的顺序 SQL查询处理步骤 事务 存储过程 索引 最左前缀规则 MySQL基础 1. from 子句组装来自不同数据源的数据; 2. join 子句将多张表连接起来 3. on 子句筛选连接表要显示的内容 4. where 子句基于指定的条件对记录进行筛选; 5. group by 子句将数据划分为多个分组; 6. 使用聚集函数进行计算; 7. 使用 having 子句筛选分组; 8. 计算所有的表达式 9. select 字段 10. distinct 去重 11. 使用 order by 子句对结果集进行排序 12. 使用 limit 子句限制结果集返回的记录数 SQL语言处理代码的顺序 SQL语言处理代码的顺序 在 SQL 语句中,第一个被处理的子句是 from ,而不是第一出现的 select 。 SQL查询处理步骤 SQL查询处理步骤 1. from 2. join 3. on 4. where 5. group by 6. having 7. select 8. distinct 9. order by 10. limit 以上每个步骤都会产生一个虚拟表,该虚拟表作为下一个步骤的输入, 只有最后一步生成的表才会返回给调用者。 事务 什么是事务,MySQL是如何支持事务的? 事务是一段 sql 的批处理,但这个批处理是原子性操作

Oracle学习 第12天

半城伤御伤魂 提交于 2019-12-20 06:43:48
这周刚好两个系统上线,连续几天加班到半夜,这周末总算轻松了,可以在家休息下,补一补Oracle,还是之前的教程,看到【更新及事务处理】,边看边更新吧 1、Insert:好像没区别 2、Update:好像没区别 3、Delete:好像没区别 4、事务/锁:事务概念和MsSQL差不多,锁的话本来MsSQL就不熟,只知道查表的时候WITH(NOLOCK)脏读提高效率 5、替代变量:之前也看到过,不知数据库搞这种交互有什么意义,最多就是存储过程带变量进来就行了吧 ===================== 也看了另外一个入门教程,函数,之前看过一个,再看这个巩固一下也好,过几天要弄真实环境来上上手了 一、数值函数 1、ROUND,取整 2、CEIL、FLOOR,上下值 3、ABS绝对值,MOD取模 4、POWER,幂 5、SQRT,平方根 6、三角函数,几乎用不上,就是数学上那些写法一样 二、字符串函数 1、UPPER、LOWER,大小写,多了个INITCAP首字母大写 2、SUBSTR,这个应该会比较常用,各个语言都是。SUBSTR('abcde',2,3),得到的是bcd,第三个参数忽略的话是取到尾,第二个参数负数的话是从尾开始 3、LENGTH,长度,空格也算 4、CONCAT,与||作用相同(MsSQL是直接用+就可以了) 5、TRIM,去首尾字符,只能是一个,另有LTRIM

Mysql存储过程

本秂侑毒 提交于 2019-12-20 01:36:46
Mysql存储过程 简介 优点 创建语句 删除语句`(目前 Mysql不支持修改存储过程只能删除后再创建` 三种查询语句 参数说明 参数 IN的简单例子 参数 OUT的简单例子 参数 INOUT的简单例子 变量 全局变量 局部变量 控制语句 if语句 case语句 while循环语句 repeat循环语句`(与 while类似, 但不同在于, 首次循环是无条件的执行 true体` loop循环语句`(与其它循环语句自身不带条件语句, 只有结束语句` 简介 存储过程(Stored Procedure)是封装了一些 SQL语句和控制结构的函数 优点 可以在数据库内完成较复杂的判断及运算, 且改动时无需修改项目源代码 从代码请求的 SQL语句, 每次请求都会重新进行编译, 如某一操作中有大量的 SQL语句, 可以通过存储过程实现, 因为存储过程是预编译的, 所以一次处理越多语句速度相对越快 能减少网络负载, 因为从代码请求的 SQL语句都是把整条语句通过网络传到数据库中执行, 不过存储过程是只需传相关存储过程名称和参数 可以作为一种安全机制来使用, 如对某一存储过程进行权限限制, 对特定数据的访问和改动限定指定的存储过程来操作 创建语句 CREATE PROCEDURE 存储过程名称([[IN|OUT|INOUT] 参数名称 数据类形…]) 存储过程体 删除语句 (目前

mysql存储过程写入数据

喜你入骨 提交于 2019-12-20 00:45:28
一、执行过程 1、创建数据库表 DROP TABLE IF EXISTS `code_info`; CREATE TABLE `code_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL DEFAULT 0, `code` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '', PRIMARY KEY (`id`) USING BTREE, INDEX `uid`(`uid`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 37093 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; 2、写入存储过程 DROP PROCEDURE if exists insert_code; DELIMITER ;; CREATE PROCEDURE `insert_code`() BEGIN DECLARE i int; SET i = 1; WHILE i <= 100000000 DO INSERT INTO code_info(id, uid, code)

Mysql调试技巧

让人想犯罪 __ 提交于 2019-12-19 19:17:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Mysql调试技巧 转至元数据结尾 附件: 转至元数据起始 Mysql存储过程&函数调试技巧 1、在存储过程中添加SELECT 变量1,变量2;在命令行调用存储过程后会输出对应变量。 2、使用调试工具:dbForge Studio for MySQL 2.1. 生成调试信息:右击要调试的过程--"Debug"--"Compile for Debugging' 2.2. 设置断点 2.3. 单步调试 2.3. 查看变量数值 鼠标移到变量上方或者选中变量点右键选择"Add Wath" 来源: oschina 链接: https://my.oschina.net/u/2363367/blog/630718

MySQL存储过程调试工具-dbForge Studio for MySQL

限于喜欢 提交于 2019-12-19 18:55:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 工具官网地址: http://www.devart.com/dbforge/mysql/studio/ 对于某些存储过程很多且复杂的SQL的应用,在短时间内要使得所有MySQL存储过程和函数正常运行,那么如果能找到一个比较好的调试工具,就可以事半功倍, 这里介绍的是dbForge Studio for MySQL。 1. 首先说明dbForge Studio for MySQL具有存储过程调试功能的版本是收费的,但有30天调用期,我想足以满足你的要求。 2安装部分省略,直接官网下载安装,没有依赖包,直接简单 3,调试存储过程,建议调试在测试环境下进行。 3.1 为存储过程,生成调试信息:右击要调试的过程--"Debug"--"Compile for Debugging', 操作如下 3.2 为存储过程设置断点:打开存储过程的代码, 在你要设置断点的行上双击便可 3.3 调试存储过程,单步执行,并查看每个变量的值。 右击存储过程---"Debug"--"Step Into", 如下图 先择"Stop Into"后,如果你的存储过程有参数,则为弹出窗体提示输入参数值,如果没有,则不直接运行; 存储过程会从"begin"开始执行,然后点又上角的"step over"(F10), 单步执行。 查看变量值:选中变量

SqlServer存储过程详解

非 Y 不嫁゛ 提交于 2019-12-19 09:44:05
SqlServer存储过程详解 1.创建存储过程的基本语法模板: if (exists (select * from sys.objects where name = 'pro_name')) drop proc pro_name go create proc pro_name @param_name param_type [=default_value] as begin sql语句 end ps:[]表示非必写内容。sys.objects存储的是本数据库中的信息,不仅仅存储表名,还有存储过程名 、视图名、触发器等等。 例如: 1 if (exists (select * from sys.objects where name = 'USP_GetAllUser')) 2 drop proc USP_GetAllUser 3 go 4 create proc USP_GetAllUser 5 @UserId int =1 6 as 7 set nocount on; 8 begin 9 select * from UserInfo where Id=@UserId 10 end ps:SQL Server 实用工具将 GO 解释为应将当前的 Transact-SQL 批处理语句发送给 SQL Server 的信号。当前批处理语句是自上一 GO 命令后输入的所有语句,若是第一条

mysql存储过程详解

限于喜欢 提交于 2019-12-19 05:43:22
mysql存储过程详解 1. 存储过程简介   我们常用的操作数据库语言 SQL 语句在执行的时候需要要先编译,然后执行,而存储过程( Stored Procedure )是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。   一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有 SQL 语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。 存储过程通常有以下优点: (1). 存储过程增强了 SQL 语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2). 存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的 SQL 语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 (3). 存储过程能实现较快的执行速度。如果某一操作包含大量的 Transaction-SQL 代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化

Oracle procedure 基本语法

╄→尐↘猪︶ㄣ 提交于 2019-12-19 05:41:11
Oracle procedure 基本语法 转自: http://lorry1113.javaeye.com/blog/513851 关键字: oracle 存储过程 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 DATE; BEGIN END 存储过程名字 2.SELECT INTO STATEMENT 将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条 记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND) 例子: BEGIN SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx; EXCEPTION WHEN NO_DATA_FOUND THEN xxxx; END; ... 3.IF 判断 IF V_TEST=1 THEN BEGIN do something END; END IF; 4.while 循环 WHILE V_TEST=1 LOOP BEGIN XXXX END; END LOOP; 5.变量赋值 V_TEST := 123; 6.用for in 使用cursor ... IS CURSOR cur IS

Java-JDBC调用批处理、存储过程、事务

房东的猫 提交于 2019-12-19 05:38:06
一、使用Batch批量处理数据库 当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率。; 1、实现批处理有两种方式,第一种方式: Statement.addBatch(sql) list 执行批处理SQL语句 executeBatch()方法:执行批处理命令 clearBatch()方法:清除批处理命令 例: Connection conn = null; Statement st = null; ResultSet rs = null; try { conn = JDBCManager.getConnection(); String sql1 = "insert into user(name,password,email,birthday) values('kkk','123','abc@sina.com','1978-08-08')"; String sql2 = "update user set password='123456' where id=3"; st = conn.createStatement(); st.addBatch(sql1); //把SQL语句加入到批命令中 st.addBatch(sql2); //把SQL语句加入到批命令中 st.executeBatch(); } finally{