标签:table 等于 1对多 font bsp 部门 ack begin after
分页
rowid : 在数据创建时生成,值的是数据在硬盘上的存储位置,使用rowid直接访问快.(但人力无法控制的)
SELECT ROWID, D.* FROM DEPT D; -- 使用方式
ROWNUM :伪列,控制查询的返回行数
查询用户表的前五条数据
SELECT ROWNUM,EMPNO,ENAME
FROM EMP
WHERE ROWNUM<=5;
查询5到10条(误解)
SELECT ROWNUM,EMPNO,ENAME
FROM EMP
WHERE ROWNUM>=5
AND ROWNUM <=10; 注意: 这样查询是不行的,因为只有小于或者小于等于号对ROWNUM起作用
查询5到10行的数据(正解)
由于大于号对ROWNUM不起作用,所以如果要去5到10行的数据不能直接查询,
首先应该使用ROWNUM将前10行数据取出来,这时,ROWNUM也就成了表中普通的一列了,大于号就对其有作用了
然后再通过ROWNUM>5 AND ROWNUM<=10分出5到10行的数据
1 SELECT * FROM (SELECT ROWNUM R ,E.* FROM (SELECT EMPNO ,ENAME,SAL FROM EMP ORDER BY SAL DESC) E WHERE ROWNUM <=10) T -- 将ROWNUM查询出的前10条数据拿出来作为一张伪表 2 WHERE T.R>5 -- 5:(2-1)*5 3 AND T.R<=10; -- 10: 2*5
分页总结
起始页: >(页数-1)*条数
结束值: <=页数*条数
范式
三大范式:
第一范式:
最基本的范式
数据库表的每一列都是不可分割的基本数据项,同一列中不能多个值(字段不可再拆分)
第二范式:
需要确保每一个列都和主键相关,而不是只与某一部门有关(主要针对联合主键而言)
联合主键: 一个表中只能有一个主键,但可以由多个列组成
在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中
(可以把多对多的属性,转为1对多)
第三范式:
每一列数据都和主键直接相关,而不是间接相关
不依赖于其他非主键属性
第一: 列不能再拆分
第二:把多对多转为1对多
第三:列要和主键直接相关,不相关就拆
数据库表之间的关系:
1对1 : 学生和学生证
1对多: 学生和班级
多对多: 学生和课程
表示数据库表之间的关系: 外键
触发器
1 -- 创建一整张表记录操作记录 2 CREATE TABLE EMP_LOG( 3 UNAME VARCHAR2(20), 4 ATIME DATE 5 ); 6 7 -- 设置一个触发事件,当删除表中数据时,触发触发器 8 CREATE OR REPLACE TRIGGER SSSS 9 AFTER 10 DELETE ON T_EMP -- 当删除T_EMP表的数据时触发 11 BEGIN 12 INSERT INTO EMP_LOG VALUES (USER, SYSDATE); -- 记录修改数据的嗯以及修改时间 13 END; 14 15 16 -- 往一张表中插入数据触发触发器 17 INSERT ON TEST_CREATE_TAB
事务
事务是一个操作序列,这些操作要么都做,要么都不做.是一个不可分割的工作单位
事务起始于一条dml语句
结束于:
1.commit,ROLLBACK 语句
2.当执行ddl语句事务自动提交
3.用户正常断开连接时,事务自动提交
4.系统崩溃或断电时事务自动回退
COMMIT : 提交
ROLLBACK : 回退
注: 一旦执行commit语句,将目前对数据库的操作提交给数据库(实际写入db) 以后就不能用ROLLBACK进行撤销
回滚前数据的状态:
以前的数据可恢复的
当前的用户可以看到dml操作的结果
其他用户不能看dml操作的结果
被操作的数据被锁住,其他用户不能修改这些数据
提交后数据的状态:
数据的修改被永久写在数据库中
数据以前的状态永久性丢失
所有的用户都能看到操作后的结果
记录锁被释放,其他用户可操作这些记录
回滚后数据的状态:
语句将放弃所有数据的修改
修改的数据被回退
恢复数据以前的状态
行级锁被释放
标签:table 等于 1对多 font bsp 部门 ack begin after
原文地址:https://www.cnblogs.com/Myarticles/p/8819376.html