java的上一条下一条怎么查询 java回到上一条语句执行_存储过程


第十三节 -视图、事物、索引、存储过程、触发器

东西比较多比较杂,笔记当时学的时候记得也是东一榔头,西一棒槌的

视图:

为什么要用视图?

语法:


create view  视图名字(列名1,列名2) as 一条select语句


1、可以简化查询

查询每个栏目下面商品的平均价格,并按照平均价格排序,查询平均价前三高的栏目。


SELECT cat_id,AVG(market_price) AS price
FROM goods
GROUP BY cat_id ORDER BY price DESC LIMIT 3;


java的上一条下一条怎么查询 java回到上一条语句执行_java的上一条下一条怎么查询_02


视图情况:


CREATE VIEW v_top3_avg_by_cat AS
SELECT cat_id,AVG(market_price) AS price 
FROM goods
GROUP BY cat_id ORDER BY price DESC LIMIT 0,3;


查询操作返回结果集,这个查询结果就可以当成一张表来使用。

视图就是将这个查询返回的结果集起了一个名字保存起来,视图就是

临时存储数据构成的一张表。

不是一个真正的表,但是我们使用时候可以当成一张表来使用。

2、可以进行权限控制

把表的增删改查的权限封闭,但是只开放相应的视图权限,视图里面只是有我们想开放的数据。

-- 班级名称 学生人数

-- 通过查询视图实现,班级人数>1


java的上一条下一条怎么查询 java回到上一条语句执行_字段名_03


1、视图的数据来源于数据表,修改视图的时候也会修改数据表。

2、但是我们建议使用视图主要用于查询数据,不建议用视图去修改数据。


索引:书的目录

什么是索引:

索引是一个“内置表”,该表的数据是对某个真实表的某个(些)字段的数据做了“排序”之后的存储形式。

其作用是:极大提高表查找数据的速度!——其效率(速度)可以匹敌二分查找(非常著名的算法)。

注意:索引在提高查找速度的同时,降低增删改的速度。

对创建(设计)表来说,建立索引是非常简单的事,形式如下:

索引类型 (字段名1,字段名2, .... ) //可以使用多个字段建立索引,但通常是一个

有以下几种索引:

1、普通索引:key(字段名1,字段名2, .... ):它只具有索引的基本功能——提速(其他索引不但有提速还有额外功能)

2、唯一索引:unique key (字段名1,字段名2, .... )

3、主键索引:primary key (字段名1,字段名2, .... )


事务:

事务是指逻辑上的一组操作,组成这组操作的各个单元,要么全部执行成功,要么全部实行失败。

例如:张三--李四转账

数据库开启事务的命令:

Connection接口下面的方法:

void setAutoCommit(boolean autoCommit);autoCommit - 为 true 表示启用自动提交模式;为 false 表示禁用自动提交模式(默认情况下就是true)

void commit();手动提交事物。

void rollback();回滚(出现异常的时候,所有已经执行成功的代码需要回退到事务开始前的状态)

默认情况下,Connetion对象处于自动提交模式下,这意味着他在执行每个语句后都会自动提交更改。

如果禁用自动提交模式,那么提交更改就必须显示调用commit方法,否则就无法保存数据库的更改。

结束事务:COMMIT 或 ROLLBACK

COMMIT 表示提交,即事务中的多条 SQL 语句所更改的数据会持久化到数据库中。或者 ROLLBACK 表示回滚,即回滚到事务的起点,将之前所做的所有操作撤销。

ROLLBACK 可以结束事务,但不代表会将数据持久化到数据库中,而只有 COMMIT提交才可以将数据持久化到数据库中。

为什么JDBC事务里面要使用 rollback() ?segmentfault.com

java的上一条下一条怎么查询 java回到上一条语句执行_存储过程_04


书写结构:


private Connection conn = null;
private PreparedStatement ps = null;
try {
    conn.setAutoCommit(false); //将自动提交设置为false
    ps.executeUpdate("修改SQL"); //执行修改操作
    ps.executeQuery("查询SQL"); //执行查询操作
    conn.commit(); //当两个操作成功后手动提交
} catch (Exception e) {
    conn.rollback(); //一旦其中一个操作出错都将回滚,使两个操作都不成功
    e.printStackTrace();
}


java的上一条下一条怎么查询 java回到上一条语句执行_存储过程_05



存储过程:

包含一系列sql语句的集合,完成一个复杂的功能,存储过程可以被反复使用,执行效率高。

存储过程功能上类似于Java里面封装的函数。

DELIMITER:定界符

MYSQL的默认结束符为";",其实就是告诉mysql解释器,该段命令是否已经结束了,mysql可以执行了。

在命令行客户端中,如果有一行命令以分号结束,如输入下面的语句:

mysql> select * from test_table;

回车后,mysql将会执行该命令。

但有时候,不希望MySQL这么做,可能输入较多的sql语句,且语句中包含有分号,那么我们就可以重新定义定界符。


-- 存储过程  类似于java中函数
delimiter $$ -- 将原来";"这个定界符替换为"$$"
CREATE PROCEDURE show_student()
BEGIN
    UPDATE goods SET goods_number=goods_number+1;
   SELECT * FROM goods;
END $$
delimiter ; -- 存储过程定义完了之后恢复原来的定界符";"
 
CALL show_student; -- 调用存储过程


java的上一条下一条怎么查询 java回到上一条语句执行_字段名_06



触发器(Trigger):

是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件触发。

触发器经常用于加强数据的完整性约束和业务规则等。

在MySQL中,触发器可以在你执行INSERT、UPDATE或DELETE的时候,执行一些特定的操作。在创建触发器时,可以指定是在执行SQL语句之前或是之后执行这些操作。通过触发器,你可以实现一些业务逻辑或一些数据限制,在简化应用程序逻辑,优化系统性能时非常有用。

实现一个触发器:在student表里面插入一条记录的时候在student_total表里面的total字段加1


java的上一条下一条怎么查询 java回到上一条语句执行_存储过程_07


文末 over~