MySQL数据库学习小结:
1. 安装MySql和客户端SQLyog
2. 了解SQL的分类:
- DDL:数据定义语言。定义database、table等等
- DML:数据操作语言。数据的增、删、改
- DQL:数据查询语言。查询数据
- DCL:数据控制语言。DBA使用的,管理MySql的用户、权限等等
- TCL:事务管理语言。进行事务管理的
3. DDL:操作database
- 创建database create database 数据库名称
- 查看database show databases; show create database 数据库名称
- 删除database drop database 数据库名称
- 使用database use 数据库名称 select database()
4. DDL:操作table
1. 创建table create table 表名(字段名1 类型, 字段名2 类型,...)
2. 查看table show tables, desc 表名称, show create table 表名称
3. 删除table drop table 表名
4. 修改table
1. 添加字段:alter table 表名 add 字段名 类型
2. 修改字段名:alter table 表名 change 原字段名 新字段名 类型
3. 修改字段类型:alter table 表名 modify 字段名 新类型
4. 删除字段:alter table 表名 drop 字段名
5. 重命名表:rename table 表名 to 新表名
5. DML:
1. 添加数据:insert into 表名(字段1, 字段2, ...) values (值1, 值2, ...)
2. 修改数据:update 表名 set 字段1=值1, 字段2=值2,... where 条件
3. 删除数据:delete from 表名 where 条件
6. DQL:
1. 查询所有 select * from 表名
2. 查询指定字段 select 字段1, 字段2, .. from 表名
3. 查询处理null值 select ifnull(字段,默认值) from 表名
4. 查询并运算 select 字段1+100, 字段2-字段1, ... from 表名
5. 查询起别名 select 字段1 as 别名1, 字段2 别名2 from 表名
6. 去重查询 `select distinct 字段1, 字段2,.. from 表名
1. DQL所有的查询
2. 了解备份和恢复:SQLyog
3. 了解约束:
1. 主键约束
1.) 作用:一张表的唯一标识,非空唯一
2.) 语法:字段名 类型 primary key auto_increment
2. 唯一性约束
1.) 作用:限制字段值唯一不能重复(可以为null) 2. )语法:字段名 类型 unique
3. 非空约束
1.) 作用:限制字段值不能为空
2.语法:字段名 类型 not null
4. 默认值约束
1.) 作用:不设置字段值,就取默认值
2.)语法:字段名 类型 default 默认值
5. 外键约束
1.) 作用:限制字段值,必须从主表的主键取值
2. )语法:foreign key(外键字段) references 主表(主键)
4. 表关系:
1. 一对一
2. 一对多
1. 建表原则:在从表(多的一方)设置外键,指向主表(一的一方)的主键
3. 多对多
1. 建表原则:创建一张中间关系表,维护多对多关系(外键字段分别维护两张表的关系)
1. 范式了解
- 1NF:列不可分割
- 2NF:表里的字段完全依赖于主键
- 3NF:表里字段引用其它表值时,要把字段设置成外键、引用其它表的主键
2. 多表查询 1. 查询技巧:
1. 确定数据在哪些表里
2. 确定这些表的关联条件
3. 关联之后,筛选想要的数据
2. 内连接查询:查询表里必定有关联的数据
1. 隐式内连接
2. 显式内连接
3. 外连接查询:查询一张表的全部数据,以及另外一张表的关联数据
1. 左外连接:查询左表的全部数据,及右表的关联数据
2. 右外连接:查询右表的全部数据,及左表的关联数据
4. 子查询:是查询技巧,没有固定语法,查询嵌套
1. 子查询结果是一行一列:一个值
2. 子查询结果是多行一列:一个集合
3. 子查询结果是多行多列:一个虚拟表
3. 事务
1. 事务的作用:保证 事务里多个操作,要么全部成功,要么全部失败
2. 什么时候用事务:多个DML操作
3. 了解事务管理的方式:
1. 自动提交的方式
1. 关闭自动提交set autocommit=0
2. 执行DML操作
3. 提交事务commit/回滚事务rollback
2. 手动提交的方式
1. 开启事务start transaction
2. 执行DML操作
3. 提交事务commit/回滚事务rollback
4. 了解事务的原理
5. 了解事务的回滚点
6. 记住事务的四大特性:A原子性 C一致性 I隔离性 D持久性
7. 记住事务并发的问题:脏读、不可重复读、虚读/幻读
8. 了解解决事务并发问题的方式:设置事务的隔离级别
1. read uncommitted:存在:脏读、不可重复读、虚读/幻读; 解决了:无
2. read committed:存在:不可重复读、虚读/幻读; 解决了:脏读
3. repeatable read:存在:虚读/幻读; 解决了:脏读、不可重复读
4. serializable:存在:无; 解决了:脏读、不可重复读、虚读/幻读
1. JDBC的快速入门步骤:导入jar包之后,代码有6步:
1. 注册驱动
2. 获取连接
3. 创建SQL执行平台
4. 执行SQL语句
5. 处理结果
6. 释放资源
2. Statement执行SQL的几种方法:
//执行DQL
ResultSet resultSet = statement.executeQuery(sql);
//执行DML,返回值int,表示影响行数
int count = statement.executeUpdate(sql);
//执行其它SQL,返回boolean,表示是否执行了查询/是否有结果集产生
boolean isQuery = statement.execute(sql);
3. 处理结果集ResultSet的方法:
while(resultSet.next()){
//一定要先next一次,才可以获取数据
XXX value = resultSet.getXXX(int 列序号);//列序号从1开始
XXX value = resultSet.getXXX(String 列名称);
}
1. JDBC的事务管理
1. 相关的方法:都是Connection对象的方法
1. 开启事务:setAutoCommit(false)
2. 提交事务:commit()
3. 回滚事务:rollback()
2. 事务管理的步骤
:try{
// 获取连接
// ==开启事务:获取连接之后,执行SQL之前开启即可
//创建SQL执行平台
//执行SQL语句
//处理结果
//==关闭事务:提交事务,在关闭连接之前提交事务即可
}catch(Exception e){
//==关闭事务:回滚事务
}finally{
//释放资源
}
1. 掌握预编译对象的使用
1. 改造SQL语句:把参数写成占位符?
2. 编译SQL,得到预编译对象:PreparedStatement pstmt = connection.prepareStatement(sql)
3. 设置SQL的参数值:pstmt.setXXX(参数序号, 参数值)
4. 执行SQL语句:pstmt.executeQuery();pstmt.executeUpdate()
2. 预编译对象的好处:
1. 解决了SQL注入漏洞
2. 性能高:同一语句,只要编译一次,可以执行多次
3. 提高可读性:SQL语句易读
3. 理解装饰者模式:进行方法的功能增强
4. 理解连接池的原理:
5. 理解连接池的好处:
1. 效率高
2. 连接循环使用:
1. 少量连接,可以支持大量的数据库操作;不用创建大量的Connection对象,避免内存溢出
2. 创建的连接少了,避免数据库所有可用连接,都被占用,导致没有连接可用
6. 掌握c3p0/druid连接池的使用
1. 导入jar包
2. 提供配置文件
1. 无论什么连接池,都有一些必须的配置项:1. 数据库连接地址
2. 数据库的用户名
3. 数据库的密码
4. 数据库的驱动类名(建议提供)
2. c3p0的配置文件:c3p0-config.xml,放在src下(类加载路径下)
3. druid的配置文件:xxx.properties,建议放在src下
3. 编写代码,使用连接池
1. 创建一个连接池对象
1. c3p0连接池对象的创建:new ComboPooledDataSource()
2. druid连接池对象的创建:DruidDataSourceFactory.createDataSource(properties对象)
2. 从连接池中获取一个连接:getConnection()
3. 使用连接操作数据库
4. 归还到连接池:connection.close()
|
|