逻辑组件
表空间、段、区、块、架构对象
物理组件
.dbf 存数据库表的文件
.ctl 控制文件,数据库的位置,空间等
.log 日志文件 记录对数据库的更改
建表的步骤(需要登录管理员账号(sys/system))
创建表空间,指定表空间的大小,是否自动增长大小等操作
创建用户,并指定默认的表空间
授权操作
授权connect连接,使能够利用该用户登录
授权DBA(相当于超级管理员权限,不建议授权),resource(可以对表进行增删改查)
等等。。。。。。
数据完整性
数据完整性
实体完整性要求表中的每一行数据都反映不同的实体,不能存在相同的数据行。通过主键约束,唯一约束来实现实体完整性。(1)主键约束:
表中的一列或者纪略组合的值能用来唯一的表示表中的每一行,这样的一列或者多列的组合叫做表的主键。
主键自带唯一性,并且不能为空,一个表只能有一个主键,主键确保了表中数据行的唯一,同一张表中,可以使用多个列共同作为主键。在选择主键时,应遵循两个原则,最少性和稳定性。
(2)唯一约束:
保证数据行中的某一列的数据是唯一的,不重复的。这样可以添加唯一约束。
唯一约束和主键的区别:
主键不能为空,唯一可以为空,但只允许有一个空值。
主键一张表中只有一个,而唯一可以有多个。
主键可以由多个表来组成,唯一只能是单列。
主键可以作为其他表的外键,唯一不可以。
域完整性:
域完整性是指给定列的输入的有效性。通过数据类型、检查约束、输入格式、外键约束、默认值、非空约束等方法来实现。
引用完整性:
引用完整性是指为两个表中存在一定的联系,从而保证数据的完整性。例如:班级和学生,学生所在班级一定是在班级表中所存在的,不然就会出现不准确。引用完整性我们可以通过外键约束来实现。
自定义完整性:
用户自己定义约束规则。主要通过存储过程和触发器对象来实现。
三大范式
第一范式:列具有原子性,不能再拆分
第二范式:一般用户联合主键
第三范式:主键不能传递依赖
表之间的联系
1对1 :把常用的放到一张表,不常用的放另一张表,主键一样
1对多:1的主键是多的外键
多对多:注意拆开成两个一对多,引入中间表
子查询
子查询是一个select语句,可以在外部select语句的from,where,having等子句中使用,另外在update和delete语句中也可以使用子查询。
在子查询汇总可以使用两种比较操作符:单行操作符和多行操作符
1. 单行操作符(返回单行或者零行的记录) 例如 = , > , >= , < , <= , <>不等于 ,!=
2. 多行操作符
all,
any,
in,针对于单个字段 eg:select * from stu where sno in (select。。。。。。) 单个字段sno
exists
可以把子查询分为两种类型:
单行子查询和多行子查询
1. 单行子查询: 向外部的sql语句只返回一行数据,或者不返回任何内容
单行子查询可以放到select语句的where子句和having子句中
2. 多行子查询: 向外部的sql语句返回多行。要处理返回多行记录的子查询,外部查询需要使用多行操作符。
分组统计函数(聚合函数)
COUNT(*) 表示计算所有的行的行数,包括完全相同的行和空行;
COUNT(column) 表示计算列中存在值的行的数目,不包括该列为空的行;
count(0) 第一列 count(1) 第二列
COUNT(DISTINCT column) 类似于COUNT(column),但在计算时不包括重复值
AVG():求出平均值;
SUM():求和;
MAX():求出最大值;
MIN():求出最小值;
分组子句
group by:分组查询(查询搜索的字段要么是分组的条件字段要么是聚合函数),注意,只要from前面有聚合函数,如果还有其他的搜索字段,就必须利用其他所有字段进行分组;
group by分组后,select时只能选择进行分组的字段。例如要显示出sno和sname,需要对它们进行分组
having :having应在 GROUP BY 子句后面指定。 HAVING 子句中,只能出现GROUP BY 子句中出现的列。
对分组的条件进一步进行筛选
内连接(等值连接)(共有的数据,交集)
直接用where的子句判断关联的字段相等(隐式内连)
INNER JOIN(显示内连)
外连接
左(外)连接:LEFT OUTER JOIN…ON;把右表中不存在,而左表有的数据列出来,(查得更多的是左边)
右(外)连接:RIGHT OUTER JOIN…ON;
(oracle简单的写法:哪张的表补空,就在哪张表的条件后面加上 (+) 的符号)
全(外)连接:FULL OUTER JOIN…ON;-->把两张表中没有的数据都显示
事务的特性
原子性(atomic),
一致性(consistent)数据库的数据要有一致性,
隔离性(isolated)两个用户操作的数据不应该受到彼此的影响,用乐观锁,
持久性(durable),不管事务的成功与否都应该被保存下来
事务的实现(操作)
1. jdbc事务:commit或者rollback (重点关注)
2. oracle事务操作:
set transaction 设置事务的属性
commit 提交事务
savepoint 设置保存点
rollback 回滚事务
rollback to savepoint 回滚至保存点
jdbc连接数据库的步骤(以oracle为例)
1. 导入ojdbc*.jar包(oracle)
2. 注册JDBC驱动程序,加载数据库驱动,可以将它放在静态代码块中
static{ Class.forName("oracle.jdbc.OracleDriver");
}
3. 数据库URL配置
指定url———》jdbc:oracle:thin:@地址:端口号:实例名
jdbc:oracle:thin:@localhost:1521:orcl
指定user———》用户名称
指定password———》对应的密码
4. 利用数据库URL配置,创建连接对象(调用DriverManager对象的getConnection()方法来建立实际的数据库连接,这里用的是getConnection(String url, String user, String password)),可以作为一个静态方法,供多处调用
Connection conn = DriverManager.getConnection(url, user, password);
5. 利用statement,或者preparestatement 两个的executeQuery(),executeUpdate()方法处理数据
6. 释放连接
需要释放的有ResultSet res, Statement st, Connection conn,可以作为一个静态方法,供多处调用
* 总结jdbc:
可以将注册JDBC驱动程序,加载数据库驱动,数据库URL配置,创建连接对象的方法,释放连接的方法放在一个类中,就可以多处调用了。