A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 白家鑫 初级黑马   /  2019-8-15 08:51  /  1241 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.多表查询

* 查询语句

select

列名列表

from

表名列表

where····

笛卡尔积算法:* 有两个集合A,B .取这两个集合的所有组成情况。

        * 要完成多表查询,需要消除无用的数据

* 多表查询的分类:

1.内连接查询:

1.隐式内连接:使用where条件消除无用数据

2.显示内连接:select 字段列表 from 表名1 join 表名2 on 条件

3. 内连接查询:

                        1. 从哪些表中查询数据

                        2. 条件是什么

                        3. 查询哪些字段

2.外连接查询:

1.左外连接: select 字段列表 from 表1 left join 表2 on 条件

* 查询的是左表所有数据以及其交集部分。

2.右外连接: select 字段列表 from 表1 rigth join 表2 on 条件

* 查询的是右表所有数据以及其交集部分。


3.子查询

* 概念:查询中嵌套查询,称嵌套查询为子查询。

        * 子查询不同情况

                        1. 子查询的结果是单行单列的:

                        * 子查询可以作为条件,使用运算符去判断。 运算符: > >= < <= =

在查询中还有一个查询,返回的是单值 用运算符


                        2. 子查询的结果是多行单列的:

                        *子查询可以作为条件,使用运算符in来判断

结果返回的是单列多值的时候用 in


                        3. 子查询的结果是多行多列的:

                                * 子查询可以作为一张虚拟表参与查询

在查询中有一个查询。





2.事务 : 一系列事情要么都做,要么都不做

概念: * 如果一个包含多个步骤的业务操作,被事物管理那么这些操作要么同时成功要么同时失败


操作:

开始事务 : start transaction

回滚        :  roll  uback

提交 : commit;


MySQL 数据库中事务默认自动提交

* 事务提交的两种方式:


* 自动提交:

mysql就是自动提交。

* 一条DML(增删改)语句会自动提交一次事务。


* 手动提交:

* Oracle 数据库默认是手动提交事务

* 需要先开启事务,再提交


* 修改事务的默认提交方式:

* 查看事务的默认提交方式:SELECT @@autocommit; -- 1 代表自动提交  0 代表手动提交

* 修改默认提交方式: set @@autocommit = 0;



2.事物的四大特征:(重点)

1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败

2.持久性:当事务提交或回滚后,数据库会持久化的保存数据。

3.隔离性: 多个事务之间,相互独立

4.一致性: 事务操作前后,数据总量不变

ACID

         Atomic

            Consistence

           Isolation

           Durable


3.事物的隔离级别(了解)

        * 多个事务之间是隔离的,相互独立的,但是如果多个事务操作同一批数据,则会引发一些问题,射设置不同


1.脏读:一个事务,读取到另一个事务中没有提交的数据


2.不可重复读(虚读):在同一个事务中,两次读取到的数据不一样


3.幻读:一个事务操作(DML)数据表中所有的记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改


隔离级别:

1.read uncommitted: 读未提交

* 产生的问题: 脏读、不和可重复读,幻读

2.read committed : 读已提交 (Oracle  默认)

* 产生的问题: 可不重复读、幻读

3.repeatable read :可重复读)(mySQL 默认)

产生的问题: 幻读

4. serializable :串行化

* 可以解决所有的问题


注意: 隔离级别从小到大安全性越来越高,但是效率越来低




3.DCL: 管理用户、授权


1. 添加用户:

                        * 语法:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';


                2. 删除用户:

                        * 语法:DROP USER '用户名'@'主机名';


                3. 修改用户密码:

UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';

UPDATE USER SET PASSWORD = PASSWORD('abc') WHERE USER = 'lisi';


        SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');

        SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');



* mysql 中忘记了root用户的密码

                                1. cmd -- > net stop mysql 停止mysql服务

                                        * 需要管理员运行该cmd


                                2. 使用无验证方式启动mysql服务: mysqld --skip-grant-tables

                                3. 打开新的cmd窗口,直接输入mysql命令,敲回车。就可以登录成功

                                4. use mysql;

                                5. update user set password = password('你的新密码') where user = 'root';

                                6. 关闭两个窗口

                                7. 打开任务管理器,手动结束mysqld.exe 的进程

                                8. 启动mysql服务

                                9. 使用新密码登录。

        查询用户:

                        -- 1. 切换到mysql数据库

                        USE myql;

                        -- 2. 查询user表

                        SELECT * FROM USER;


                        * 通配符: % 表示可以在任意主机使用用户登录数据库


        2. 权限管理:

                1. 查询权限:

                        -- 查询权限

                        SHOW GRANTS FOR '用户名'@'主机名';

                        SHOW GRANTS FOR 'lisi'@'%';


                2. 授予权限:

                        -- 授予权限

                        grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

                        -- 给张三用户授予所有权限,在任意数据库任意表上


                        GRANT ALL ON *.* TO 'zhangsan'@'localhost';


                3. 撤销权限

                        -- 撤销权限:

                        revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

                        REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';

JDBC  基本概念

概念 : java DataBase  Connectivity  java 数据库连接( java语言操作数据库)


  • JDBC本质:

                JDBC 规范定义接口,具体的实现由各大数据库厂商来实现。 JDBC 是 Java 访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是

数据库驱动。每个 数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用 JDBC 接口中的方法即 可,数据库驱动由数据库厂商提供

例:


    • preson 接口    worker 类   person p  = new worker ();     p.eat()  


    • 利用多态的形式, 父类引用子类方法




快速入门:

  • 步骤:


    • 导入驱动jar包
              1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
              2.右键-->Add As Library




    • 注册驱动  :

Class.forName(" com.mysql.jdbc.Driver ")



    • 获取数据库连接对象 Connection :

一个连接对象,可用于创建 Statement 和 PreparedStatement 对象


Connection  conn = DriverManager . getConnection("jdbc:maysql://         localhost:3306//db3","root","root")




    • 获取SQL连接对象  Statement :

一个 SQL 语句对象,用于将 SQL 语句发送给数据库服务器。


Sting  sql  =  "update  表名 set  列名 = 修改列值  where  你要改的行 = 行数 "  (修改)



    • 执行sql,接受返回结果     ResultSet rs =  statement.executeupdata



    • 处理结果    while(rs.next()) {

rs。getxxx()


    • 释放资源   close();




                                     详解个个对象                                                   


JDBC 核心API:       


1. DriverManager 类  :

1.管理和注册数据库驱动  

Class.forname("")

  2.得到数据库连接对象

Connection getConnection (String url, String user, String password)

通过连接字符串,用户名,密码来得到数据 库的连接对


url :  jdbc:mysql://localhost:3306/数据库[?参数名=参数值]

user :   用户名

password :  密码


2. Connection 接口 :

概念:具体的实现类由数据库的厂商实现,代表一个连接对象。 可用于创建 Statement 和 PreparedStatement 对象。


createStatement() 创建一条 SQL 语句对象



3. Statement 接口 :


概念:一个 SQL 语句对象,用于将 SQL 语句发送给数据库服务器。 使用 Statement 对象执行 SQL 语句

int executeUpdate   用于发送 DML 语句,增删改的操作,insert、update、delete 参数:SQL 语句 返回值:返回对数据库影响的行数 ResultSet

               

                executeQuery(String sql) 用于发送 DQL 语句,执行查询的操作。select 参数:SQL 语句 返回值:查询的结果集


4. PreparedStatemen 接口 :

概念: 一个 SQL 语句对象,是 Statement 的子接口


5. ResultSet 接口 : 用于封装数据库查询的结果集,返回给客户端 Java 程序








Connection创建PreparedStatement对象

PreparedStatement prepareStatement(String sql) 指定预编译的 SQL 语句,SQL 语句中使用占位符? 创建一个语句对象


PreparedStatement接口中的方法:

int executeUpdate() 执行 DML,增删改的操作,返回影响的行数。

ResultSet executeQuery() 执行 DQL,查询的操作,返回结果集


8.6 使用PreparedStatement的步骤:


1 编写 SQL 语句,

未知内容使用?占位:"SELECT * FROM user WHERE         name=? AND password=?";

2 获得 PreparedStatement 对象

3 设置实际参数:setXxx(占位符的位置, 真实的值)

4 执行参数化 SQL 语句

5 关闭资源





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马