码迷,mamicode.com
首页 > 其他好文 > 详细

分页、范式、触发器、事务

时间:2018-04-13 12:06:13      阅读:175      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!