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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 农家豆腐 初级黑马   /  2018-12-10 14:47  /  617 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

day01 MySQL基础

数据库
batabase    用于存储和管理数据的仓库

数据库的特点:
1. 持久化存储数据的。其实数据库就是一个文件系统
2. 方便存储和管理数据
3. 使用了统一的方式操作数据库 -- SQL

SQL
结构化查询语言, 操作所有关系型数据库规则
分类: DDL  DML   DQL   DCL

DDL   [关键字:create, drop,alter 等]
操作数据库:CRUD
create database 数据库名称;
show databases;
show create database 数据库名称;
alter database 数据库名称 character set 字符集名称;
drop database 数据库名称;
select database();
use 数据库名称;

操作表
create table 表名(列名1 数据类型1,......列名n 数据类型n);
create table 表名 like 被复制的表名;
show tables;
desc 表名;
alter table 表名 rename to 新的表名;
alter table 表名 character set 字符集名称;
alter table 表名 add 列名 数据类型;
alter table 表名 change 列名 新列别 新数据类型;
alter table 表名 modify 列名 新数据类型;
alter table 表名 drop 列名;
drop table 表名;

DML   [关键字:insert, delete, update 等]
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
insert into 表名 values(值1,值2,...值n);
delete from 表名 where 条件;

DQL

语法
select   字段列表        from          表名列表  where  条件列表   
group by  分组字段  having    分组之后的条件
order by   排序   limit  分页限定

SELECT DISTINCT 字段名 FROM 表名;
SELECT 字段名 FROM 表名 WHERE 字段 in (数据1, 数据2...);
BETWEEN 值1 AND 值2;
IFNULL(expr1,expr2)
如果 expr1 不是 NULL,IFNULL() 返回 expr1,否则它返回 expr2。
IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境

操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。





day02 MySQL约束


DQL
1. 排序查询        2. 聚合函数        3. 分组查询        4. 分页查询

排序查询
order by 子句
ASC:升序,默认的。  DESC:降序。
如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

聚合函数:将一列数据作为一个整体,进行纵向的计算。
聚合函数的计算,排除null值。
解决方案:
1. 选择不包含非空的列进行计算
2. IFNULL函数

分组查询
group by 分组字段 / 聚合函数;
where 和 having 的区别
1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。

分页查询
1. 语法:limit 开始的索引,每页查询的条数;
2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
limit   x , y
x 是前边已经有多少条了
y 是本页显示多少条

约束
对表中的数据进行限定,保证数据的正确性、有效性和完整性。
1. 主键约束:primary key
2. 非空约束:not null
3. 唯一约束:unique
4. 外键约束:foreign key


非空约束
创建表完后,添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);



唯一约束
在表创建完后,添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
删除唯一约束
ALTER TABLE stu DROP INDEX phone_number;


主键约束
创建完表后,添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
删除主键
ALTER TABLE stu DROP PRIMARY KEY;


外键约束
创建表之后,添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;


自动增长(数值类型)
添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
删除自动增长
ALTER TABLE stu MODIFY id INT;

级联操作
在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON   DELETE CASCADE ;
分类:
1. 级联更新:ON UPDATE CASCADE
2. 级联删除:ON DELETE CASCADE


表与表之间的关系
一对多     主外键的关系
多对多    中间表,两个一对多
一对一
1) 特殊一对多,从表中的外键设置为唯一
2) 从表中的主键又是外键


数据规范化
三大范式
第一范式每一列不可再拆分,称为原子性。

第二范式
特点:  在第一范式的基础上所有列完全依赖于主键列。
1) 一张表只描述一件事情。
2) 表中的每一列都完全依赖于主键。

第三范式
2NF的基础上, 任何非主列不得传递依赖于主键。


如果一个字段设置了非空与唯一约束,该字段与主键的区别?
1) 主键数在一个表中,只能有一个。不能出现多个主键。主键可以单列,也可以是多列。
2) 自增长只能用在主键上




day03 MySQL多表 事务


MYSQL中可以有两种方式进行事务的操作:
1) 手动提交事务
2) 自动提交事务

手动提交事务的SQL语句
开启事务                start transaction;
提交事务                 commit;
回滚事务                rollback;

回滚点
设置回滚点    savepoint 名字
回到回滚点    rollback to 名字


自动提交事务
MySQL默认每一条DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执行完毕自动提交事务,MySQL默认开始自动提交事务

查询隔离级别   select @@tx_isolation;
设置隔离级       set global transaction isolation level 级别字符串;

事务的隔离级别
事务的四大特性ACID
原子性    一致性    隔离性    持久性

MySQL数据库有四种隔离级别
1   读未提交   read uncommitted
2   读已提交   read committed
Oracle和SQL Server
3   可重复读   repeatable read
MySQL
4   串行化   serializable
隔离级别越高,性能越差,安全性越高。




day04 _JDBC


JDBC
JDBC规范定义接口,具体的实现由各大数据库厂商来实现。
使用JDBC的好处:
1)  程序员如果要开发访问数据库的程序,只需要会调用JDBC接口中的方法即可,不用关注类是如何实现的。
2)  使用同一套Java代码,进行少量的修改就可以访问其他JDBC支持的数据库

加载和注册驱动的方法
Class.forName(数据库驱动实现类)
加载和注册数据库驱动,
数据库驱动由mysql厂商"com.mysql.jdbc.Driver"

com.mysql.jdbc.Driver 类 内有静态代码块
DriverManager.registerDriver(new Driver())----> 注册数据库驱动

DriverManager作用:
1) 管理和注册驱动
2) 创建数据库的连接

Connection作用:
具体的实现类由数据库的厂商实现,代表一个连接对象。

Statement作用:
代表一条语句对象,用于发送SQL语句给服务器,用于执行静态 SQL 语句并返回它所生成结果的对象。

ResultSet接口:
作用:封装数据库查询的结果集,对结果集进行遍历,取出每一条记录。

ResultSet接口中的方法
boolean next()
1) 游标向下移动1行
2) 返回boolean类型,如果还有下一条记录,返回true,否则返回false
数据类型 getXxx()
1) 通过字段名,参数是String类型。返回不同的类型
2) 通过列号,参数是整数,从1开始。返回不同的类型


DBC访问数据库的步骤
1) 注册和加载驱动(可以省略)
2) 获取连接
3) 创建SQL,和执行SQL对象
4) 执行SQL获取结果
5) 处理结果
6) 释放资源

SQL注入问题
原因: 使用 Statement时 字符串拼接....
PreparedSatement的好处
1. 会先将SQL语句发送给数据库预编译。PreparedStatement会引用着预编译后的结果。可以多次传入不同的参数给PreparedStatement对象并执行。减少SQL编译次数,提高效率。
2. 安全性更高,没有SQL注入的隐患。
3. 提高了程序的可读性

给占位符?赋值:
* 方法: setXxx(参数1,参数2)
* 参数1:?的位置编号 从1 开始
* 参数2:?的值


JDBC事务的处理
Connection接口中与事务有关的方法
void setAutoCommit(boolean autoCommit)
参数是true或false
如果设置为false,表示关闭自动提交,相当于开启事务







day05 数据库连接池  Spring JDBC


数据库连接池
数据库厂商来实现

获取连接:getConnection()
归还连接:Connection.close()   如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接,而是归还连接。

一般我们不去实现它,有数据库厂商来实现
1. C3P0:数据库连接池技术
2. Druid:数据库连接池实现技术,由阿里巴巴提供的

C3P0:数据库连接池技术
1. 导入jar包
(两个) c3p0-0.9.5.2.jar 和  mchange-commons-java-0.2.12.jar
导入数据库驱动jar包
2. 定义配置文件
c3p0.properties 或者 c3p0-config.xml
路径:直接将文件放在src目录下即可。
3. 创建核心对象 数据库连接池对象 ComboPooledDataSource
4. 获取连接: getConnection
* 代码:
//1.创建数据库连接池对象
DataSource ds = new ComboPooledDataSource();
//2. 获取连接对象
Connection conn = ds.getConnection();

Druid:数据库连接池实现技术,由阿里巴巴提供的
步骤:
1. 导入jar包 druid-1.0.9.jar
2. 定义配置文件:
是properties形式的
可以叫任意名称,可以放在任意目录下
3. 加载配置文件。Properties
4. 获取数据库连接池对象:通过工厂来来获取 DruidDataSourceFactory
5. 获取连接:getConnection()

Spring JDBC
Spring框架对JDBC的简单封装




0 个回复

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