mysql存储过程

sql语句性能优化

社会主义新天地 提交于 2020-04-03 21:37:55
面试的时候被面试官问到sql语句的性能优化,回来百度才发现我了解的那些真的是凤毛麟角,废话不多说,上干货: 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2,应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。 3,应尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。 4,应尽量避免在 where 子句中使用 or 来连接条件, 否则将导致引擎放弃使用索引而进行全表扫描, 可以 使用UNION合并查询: select id from t where num=10 union all select id from t where num=20 5,in 和 not in 也要慎用,否则会导致全表扫描,对于连续的数值,能用 between 就不要用 in 了:Select id from t where num between 1 and 3 6,下面的查询也将导致全表扫描:select id from t where name like ‘%abc%’ 或者select id from t

MySQL的存储过程联系

隐身守侯 提交于 2020-03-20 00:10:16
BEGIN #Routine body goes here...   declare tmp0 VARCHAR(1000); declare tmp1 VARCHAR(1000);   declare done int default -1;-- 用于控制循环是否结束   /* 声明游标 */   declare myCursor cursor for select name,address from ads_building_info;   /* 当游标到达尾部时,mysql自动设置done=1 */ declare continue handler for not found set done=1;   /* 打开游标 */   open myCursor;  /* 循环开始 */   myLoop: LOOP /* 移动游标并赋值 */       fetch myCursor into tmp0,tmp1;       if done = 1 then       leave myLoop;       end if;       /* do something */       -- 循环输出信息      insert into test_demo (name,address) VALUES (tmp0,tmp1);    end loop myLoop; close

Java调用MySQL存储过程

倾然丶 夕夏残阳落幕 提交于 2020-03-14 21:53:43
Java调用MySQL的存储过程,需要用JDBC连接,环境eclipse 首先查看MySQL中的数据库的存储过程,接着编写代码调用 mysql> show procedure status; +------+-------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation | +------+-------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+---

Java Web----Java Web的数据库操作(二)

╄→尐↘猪︶ㄣ 提交于 2020-03-07 08:21:23
Java Web的数据库操作 三、JDBC操作数据库 上一篇介绍了JDBC API,之后就可以通过API来操作数据库,实现对数据库的CRUD操作了。 http://blog.csdn.net/zhai56565/article/details/9794225 下面仅以示例 的方式对数据库操作进行说明 1、 添加数据 使用PreparedStatement添加数据: String sql = "INSERT INTO tb_books(name,price,count,author)valuse(?,?,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, "西游记"); ps.setDouble(2, 66.0); ps.setInt(3, 200); ps.setString(4, "吴承恩"); int row = ps.executeUpdate(); if(row > 0) System.out.println("成功添加了" + row + "条数据"); 使用Statement添加数据: String sql = "INSERT INTO tb_books(name,price,count,author)valuse(" + "西游记" + "," + 66.0 + "," +

MySQL存储过程之事务管理

浪尽此生 提交于 2020-03-01 06:01:17
ACID:Atomic、Consistent、Isolated、Durable 存储程序提供了一个绝佳的机制来定义、封装和管理事务。 1,MySQL的事务支持 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关: MyISAM:不支持事务,用于只读程序提高性能 InnoDB:支持ACID事务、行级锁、并发 Berkeley DB:支持事务 隔离级别: 隔离级别决定了一个session中的事务可能对另一个session的影响、并发session对数据库的操作、一个session中所见数据的一致性 ANSI标准定义了4个隔离级别,MySQL的InnoDB都支持: READ UNCOMMITTED:最低级别的隔离,通常又称为dirty read,它允许一个事务读取还没commit的数据,这样可能会提高性能,但是dirty read可能不是我们想要的 READ COMMITTED:在一个事务中只允许已经commit的记录可见,如果session中select还在查询中,另一session此时insert一条记录,则新添加的数据不可见 REPEATABLE READ:在一个事务开始后,其他session对数据库的修改在本事务中不可见,直到本事务commit或rollback。在一个事务中重复select的结果一样,除非本事务中update数据库。 SERIALIZABLE

MySQL存储过程中使用SELECT …INTO语句为变量赋值

為{幸葍}努か 提交于 2020-02-22 05:16:36
使用SELECT …INTO语句为变量赋值 在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量。SELECT …INTO语句的语法格式如下: SELECT col_name[,...] INTO var_name[,...] table_expr col_name:要从数据库中查询的列字段名; var_name:变量名,列字段名按照在列清单和变量清单中的位置对应,将查询得到的值赋给对应位置的变量; table_expr:SELECT语句中的其余部分,包括可选的FROM子句和WHERE子句。 需要注意的是,在使用SELECT …INTO语句时,变量名不能和数据表中的字段名不能相同,否则会出错。范例语句: create procedure getMsg () Begin declare v_title varchar(30); declare v_content varchar(100); select title,content into v_title,v_content from news where artId=333; End 将变量值返回给调用者 在存储过程中定义的变量,经过一系列的处理之后,结果值可能需要返回给存储过程调用者。那么如何返回呢?方便的做法是使用SELECT语句将变量作为结果集返回

MySQL存储过程--(1)

穿精又带淫゛_ 提交于 2020-01-29 11:56:38
/* 参数模式: IN:该参数作为输入,该参数调用传入值 out:该参数作为输出,该参数作为返回值 INOUT:该参数即可作为输入,也可作为输出,该参数即可调用传入值,也可作为返回值 delimiter:设置结束标记,比如 //、$、# delimiter # */ 1、不带参数存储过程 delimiter // create procedure mies() BEGIN select * from student ; END // drop PROCEDURE mies(); call mies(); 2、带参数 in 存储过程 delimiter // /*传入参数,设置参数类型*/ create procedure mies(in sid int) BEGIN select * from student where sid=sno; END // drop PROCEDURE mies(); /*设置参数值*/ set @sid=20162010; call mies(@sid); /*登录用户名*/ delimiter // create procedure login(in sno int,in sname VARCHAR(16)) BEGIN declare result int DEFAULT 0;#声明并初始化 select COUNT(*) into result

mybatis调用mysql存储过程

删除回忆录丶 提交于 2020-01-26 14:38:14
//一般存储过程调用方式 mybatis < select id = "findTimeVague" resultMap = "cqsfMap" statementType = "CALLABLE" > call cqsfFindTimeVague ( # { pageSize } , # { page } , # { day_only } , # { hour_only } , # { address_name } , # { search } ) ; < / select > //带有out和in的存储过程调用方式 < select id = "findAllCount" resultMap = "cqsfMap" parameterType = "java.util.HashMap" statementType = "CALLABLE" > call cqsfFindAllCount ( # { count , mode = OUT , jdbcType = INTEGER , javaType = java . lang . Integer } ) < / select > //dao层 List < Cqsfmodel > findAllCount ( Map < String , Object > map ) ; //service层 @Override public

python后端面试第三部分:数据储存与缓存相关--长期维护

感情迁移 提交于 2020-01-22 15:34:57
################## 数据储存与缓存相关 ####################### mysql数据库, redis数据库, 9. MySQL的索引一般是怎么实现的? B-Tree(一般是B+Tree)和Hash,然后再简单介绍一下。 存储 存储可能包含rdbms,nosql以及缓存等,我以MySQL,redis举例。 mysql相关 mysql 是流行的RDBMS 关系型数据库 1.谈谈mysql字符集和排序规则? 2.var char与char的区别是什么?大小限制?utf8字符集下varchar最多能存多少个字符 char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10, 除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。 尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。 再者,char的存储方式是,对英文字符

MySQL带参数的存储过程小例子

▼魔方 西西 提交于 2020-01-21 00:10:39
http://wwty.iteye.com/blog/698239 mysql存储过程也提供了对异常处理的功能:通过定义HANDLER来完成异常声明的实现 语法如下: DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement handler_type: CONTINUE | EXIT condition_value: SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION | mysql_error_code Handlers类型: 1, EXIT: 发生错误时退出当前代码块(可能是子代码块或者main代码块) 2, CONTINUE: 发送错误时继续执行后续代码 condition_value: condition_value支持标准的SQLSTATE定义; SQLWARNING是对所有以01开头的SQLSTATE代码的速记 NOT FOUND是对所有以02开头的SQLSTATE代码的速记 SQLEXCEPTION是对所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的速记 除了SQLSTATE值,MySQL错误代码也被支持 但是对于mysql而言