mysql多表&JDBC笔记整理
mysql多表
单表的约束
主键约束: primary key 唯一非空,
唯一约束:unique
非空约束:not null
多表的约束
外键约束:用来保证数据的完整性
添加外键约束语句:alter table employee add fireign key(外键列名) references(列名)
表与表之间的关系:
一对多:用多的一方的外键指向一的一方的主键
多对多:需要创建中间表,中间表至少有两个字段,这两个字段分别作为外键,指向两个表的主键
一对一:假设是一对多,在多的一方创建一个字段与一的一方建立关联
多表查询
连接查询:
交叉连接:查询到两个表的笛卡尔积
select * from 表1 inner join表2;
select * from 表1,表2 ;
内连接:
显示内连接:select * from 表1 inner join 表二 on 关联条件;
隐式内连接:select * from 表1,表2 where 关联条件
外连接:
左外连接:select * from 表1 left outer join 表2 on 关联条件
右外连接:select * from 表1 right outer join 表2 on 关联条件
外连接和内连接的区别:
内连接查询出来的是公共的部分,
左外连接是左表加上公共的部分,
右外连接是右表加上公共的部分
子查询
in:在条件范围内
exists:if条件判断,子句为true,执行前边
any:大于任意的就是大于最小值
all:大于所有的就是大于最大值
事务
事务
start taransaction:开始事务
commit:提交事务
rollback:回滚事务
事务的特性
原子性:组成事务的各个逻辑单元不可分割
一致性:事务执行前后数据一致
隔离性:一个事务的执行,不应该收到其他事务的干扰
持久性:事务一旦提交,数据就会被永久保存
事务的隔离级别
脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致
不可重复读:一个事务独到了另一个事务已经提交的update的数据,导致多次查询结果不一致
虚读/幻读:一个失误读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致
read uncommiteed:脏读,不可重复读,虚读都有可能发生
read committed:避免脏读,但是不可重复读和虚度都是有可能发生
repeatable read:避免脏读和不可重复读,但是虚度有可能发生
serializable:避免脏读,不可重复读,虚读。
对事务的隔离级别进行操作
select @@tx_isolation:查看事务的隔离级别
set session transaction lsolation level :设置隔离级别
JDBC概述
Java Data Base Connectivity.java 由sun公司提供的一套连接数据库的接口,规范。
使用JDBC需要引入jar包
JDBC的使用
@test 注解 双击方法名就可以执行,但是必须是public修饰的方法
DriveManager:管理一组JDBC ,驱动程序的基本服务 使用这个对象注册驱动,获得与数据库的连接
registerDriver:注册驱动
static getConnection("数据库地址",数据库名称,数据库密码)获得链接
jdbc:连接数据库的一个协议
mysql:是jdbc的一个子协议
loaclhost:连接的mysql数据库服务器的主机地址(连接本机可以写成localhost或者id地址),如果不是本机就要写上要连接的电脑的Ip地址
3306:mysql服务器的端口号
url连接的是本机的路径可以简化为///数据库名称
创建sql语句对象:
CreateStatement
执行sql语句:
Statement
PrepareStatement:执行sql对sql进行预处理,解决sql注入的漏洞
Statement
作用1:执行sql语句
exectute:执行查询,修改,添加,删除的sql语句返回一个boolean类型
excuteQuery:执行查询,只能执行select语句,返回一个ResultSet结果集
excuteUpdate:执行修改,添加,删除 返回的int代表影响的行数
作用2:批处理
addBatch:添加批处理
clearBatch:清空批处理
executeBatch:执行批处理
ResultSet:
通过执行sql查询语句产生的结果集(只有查询语句才会产生结果集)
遍历结果集:
.next()向下移动一个单位
结果集的获取
getXXX();
getXXX(int columnIndex);列号
getXXX(String columnName);列名 如果有别名则使用别名
getObject():获取任意类型的值
JDBC资源释放
connection对象尽量晚创建,尽早释放掉
将资源释放的代码块写入到finally代码块中
标准资源释放:
if(rs != null){
try{
re.close();
}catch(SQLEXception e){
e.printStackTrace();
}
}
rs = null;
if(conn != null){
try{
conn.close();
}catch(SQLEXception e){
e.printStackTrace();
}
}
conn = null;
if(stmt != null){
try{
stmt.close();
}catch(SQLEXception e){
e.printStackTrace();
}
}
stmt = null;
JDBC使用步骤
注册驱动
class.forName("com.mysql.jdbc.Driver);
获得链接
DriverManager.getConnection();
//执行操作
//创建SQL对象
stmt= conn.createStatement();
//编写SQL语句
String sql = "insert into user values (null,'eee','123','a',28)";
//执行sql语句
stmt.execute();
//释放资源
|