1.什么是MySQL,是用来干什么的
是一种关系型数据库管理系统,用来存放实体和实体之间的关系的.
2.是怎么来储存数据的
一般一个应用对应一个数据库,一个数据库中有很多表,一个类可以对应一个表,比如商品什么的.
一个表里面会有很多数据,一个商品实例对应一条数据.
总结就是: 数据库管理系统 -- 数据库 -- 表 -- 数据
3.什么是sql
结构化编程语言,是一种特殊的编程语言.
4.对数据库的crud
创建数据库: create database 数据库名称
查看数据库: show databases
删除数据库: drop database 数据库名称
切换数据库: use 数据库名称
显示正在使用的数据库名称: select database();
java的数据类型对应到sql中的数据类型
byte/short/int/long tinyint/smallint/int/bigint
float float
double double
boolean bit
char/String char/varchar
data datetime/timestemp
char/varchar 的区别: char(8)"hello" -- "hello " varchar(8) "hello" -- "hello"
5.对表的crud
单表的约束:用来规范数据的完整性
常用的单表约束:
primary key 主键约束
unique 唯一性约束
not null 非空约束
auto-increment 自增长
注意: 一个表中的主键约束只有一个,自增长也只有一个
查看表: show tables
删除表: drop table 表名
添加表: 添加列 add 删除列 drop 修改列的长度 modify 更改列名 change
更改表: alter table 表名 更改表名: rename to 修改表的字符集 character set
6.对表的记录的crud
添加表记录: insert into 表名字 values(记录一,记录二,记录三)
删除表记录: delete from 表名 [where条件] 删除是删除一条记录,如果不带条件就是删除整个表记录
修改表记录: update 表面 set 列名1=值1,列名2=值2 ...[where条件] 注意: 如果不加条件就是修改这个表的所有记录
**************** 查看表记录: **************
查看所有记录: select * from 表名
查看某列记录: select 列名1,列名2 from 表名
条件查询: select * from 表名 where 条件
排序查询: select * from 表名 where 条件 order by 列名 asc(升序) desc(降序)
聚合函数查询 求和查询: select sum() from 表名
统计查询: select count() from 表名
最大值查询: select max() from 表名
最小值查询: select min() from 表名
求名均值: select avg() from 表名
分组查询: select * from 表名 group by 列名
注意where语句不能使用聚合查询,使用聚合查询可以用having语句
1多变设计之外键约束
用来表示数据之间的关系,用来保持数据的完整性和完整性.如果一个表的字段和其他表的字段的关系,就需要给这个字段添加外键指向
其他字段有关系的主键
2.多表设计的关系
一对多的关系:
建表原则,在多的一方创建外键指向一的一方的主键
多对多的关系:
建表原则,建立第三方表表示多对多的关系,至少要有两个字段作为外键分别指向双方的主键.
一对一的关系:
先假设一对一的关系是一对多的关系,在多的一方创建外键指向一的一方的主键,并把这个外键设置成唯一
3.多表查询(一定掌握)****
分为连接查询和子查询:
4.多表查询之连接查询(一定掌握)****
交叉连接:查询到的是两个表的积卡尔迪
内连接:查询到的是两个表公共的数据
外连接之左外连接:以左边表为基准,查询到两个表公共的数据和左边表的所有数据
外连接之右外连接:以右边表为基准,查询到两个表公共的数据和右边表的所有数据
5.多表查询之子查询
一个查询语句里面嵌套一个查询语句
6.事物:
什么是事物: 指的是逻辑上的一组操作,要么全部成功,要么全部失败
怎么使用事物:开启事物,start transaction
提交事物,commit
事物的特征:
原子性, 组成事物的最小单元是不可分割的,要么同时成功要么同时失败
一致性, 执行事物前后,数据的完整性是一致的
隔离性, 在数据库中,各个事物是独立的,不受其他事物的影响
持久性, 事物一旦结束,
脏读: 一个事物读到了另一个事物未提交的数据
不可重复读: 一个事物读到了另一个事物已提交的数据的update数据
幻读,虚读: 一个事物读到了另一个事物已提交的数据的insert数据
事物的隔离级别:
read uncommitted 脏读,不可重复读,幻读/虚读都有可能发生
read committed 避免了脏读,但是不可重复读和幻读有可能会发生
repeatable-read 避免了脏读和不可重复读,但是幻读有可能会发生
serializable 脏读,不可重复读,幻读/虚读都避免了
1.什么是JDBC,有什么作用
java database connection java数据库连接.是java语言编写的一组用来实现连接数据库的类和接口.作用是使用java来连接数据库和接口
什么是驱动:两个设备之间的通信桥梁.
2.入门案例的编写 (先把工作空间的编码改为utf8,再导入驱动)
步骤:
1.注册驱动
2.获取连接
3.执行sql
4.释放资源
3.driverManager的作用
是用来注册驱动和获取连接的
4.connection的作用
是用来获取执行语句的管理事物的
5.statement的作用
是用来执行sql语句和批处理的
6.ResultSet
查询操作会得到一个结果集.我们可以遍历这个结果集
7.jdbcutils工具类的提取:
为什么要提取工具类:
使用jdbc对数据库进行操作时发现,有些代码的内容是重复的.在java中如果有重复的代码出现,我们可以将这些相同的代码提取出来
写一个方法.对于jdbc,其中的注册驱动,获取连接和释放资源的内容是相同的,就可以可以把他们提取出来,写一个工具类.
8.什么是注入漏洞:
当网站有登录的操作时,用户之所以能够登录成功,是因为在数据库中能够找到对应的一条用户名和密码信息.假设用户只通过输入用户名就可以登录成功,就称为注入漏洞.
1.JDBC的事物管理
步骤: 同过connection建立连接
关闭自动提交, setautocommit(),传入false
提交事物, commit()
回滚事物, rollback()
2.连接诶池
什么是连接池: 就是一个容器,用来储存Connection连接对象的.
为什么要使用连接池: 创建和销毁连接是需要时间的,我们在初始化服务器的时候可以先创建一些连接,把这些连接存放在内存中.
使用的时候从内存中获取,使用完毕归还到连接池中.从内存中获取和归还的效率要远远高于创建和销毁的效率.
3.druid开源连接池
是阿里巴巴研发的开源项目
使用步骤:
1.导入jar包
2.创建DruidDataSourse对象
3.设置连接参数
4.C3P0连接池
使用步骤1: 创建连接池对象 ComboPooledDataSource dataSource = new ComboPooledDataSource();
手动设置参数
获取连接
使用步骤2: 配置文件
创建连接池对象 ComboPooledDataSource dataSource = new ComboPooledDataSource();
获取连接
5.JDBC工具类的改进
把创建连接池的代码放到工具类中. 创建连接很好资源,创建连接池更耗资源,一个应用只需要创建一个连接池就可以了.
6.DButils
什么是dbutils 是工具类,封装了增删改查的操作,简化了编程
DBUtils的API
1.两个核心对象 DBUtils对象和QueryRunner对象