数据库对象和约束

一、视图:
     ♠ 视图 --- 称为虚表,即虚拟的表,是一组数据的逻辑表示。 视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。
     ♠  作用:
         (1)如果需要经常执行某项复杂查询,可以基于这个复杂查询建立视图,此后查询此视图即可,简化复杂查询;
         (2)视图本质上就是一条 SELECT 语句,所以当访问视图时,只能访问到所对应的 SELECT 语句中涉及到的列,对基表中的其它列起到安全和保密的作用,限制数据访问。
     ♠   语法:CREATE VIEW v_table_name AS SELECT 语句
     ♠   分类:
          (1)简单视图 --- SELECT 语句是基于单表建立的,且不包含任何函数运算、表达式或分组函数。
          (2)复杂视图 --- SELECT 语句同样是基于单表,但包含了单行函数、表达式、分组函数或 GROUP BY 子句。
          (3)连接视图 --- SELECT 语句是基于多个表的。
     ♠   注意:
          (1)创建视图是需要权限的。例如:赋予权限 ---GRANT CREATE VIEW TO tarena
(2) 视图中对应的查询语句的字段可以添加别名,那么视图中该字段就是用别名作为字段名。
(3)当视图中的查询语句的对应字段含有函数或者表达式,那么该字段必须给别名。
(4)对视图进行 DML 操作,但是并非是对视图本身进行,而是对视图数据来源的表进行了 DML.
(5)视图看不到的字段,全部插入默认值。这里就需要注意,若视图看不到的字段中含有 NOT NULL 约束的字段,那么向视图插入数据是不会成功的。
(6)通过视图插入了一条视图看不到的数据后,就会对基础班产生“污染“。
(7)修改视图可能对基础班产生污染。
(8)删除只能删除视图看得到的数据
(9)复杂视图不允许 DML 操作
     ♠   操作:
    • 创建视图 --- CREATE VIEW v_emp_rs AS SELECT empno, ename, sal, deptno FROM emp_rs WHERE deptno = 10
    • 修改视图 --- CREATE OR REPLACE VIEW v_emp_rs AS SELECT empno, ename, sal, deptno FROM emp_rs WHERE deptno = 10
    • 删除视图 --- DROP VIEW view_name
     ♠   WITH CHECK OPTION :  
          作用:在 CREATE视图语句的最后添加 WITH CHECK OPTION 后,视图可以对进行 DML操作的数据进行检查,插入的数据必须视图可见,修改的数据必须保证修改后视图对其仍然可见才可以操作,避免对基表污染。
          例如:CREATE VIEW v_emp_rs AS SELECT empno, ename, sal, deptno FROM emp_rs WHERE deptno = 10 WITH CHECK OPTION
     ♠   WITH READ ONLY :
          作用:当视图设置后,该视图不允许 DML 操作。
     ♠   和视图相关的数据字典:
  —USER_OBJECTS
  —USER_VIEWS
  —USER_UPDATE_COLUMNS
例如:在数据字典 USER_OBJECTS 中查询所有视图名称
          SELECT object_name FROM user_objects WHERE object_type = 'VIEW'

二、序列:
     ♥ 序列 --- 是一种用来生成唯一数字值的数据库对象。序列的值由 Oracel 程序按递增或递减顺序自动生成,通常用来自动产生表的主键值,是一种高效率获得唯一键值的途径。序列是独立的数据库对象,和表是独立的对应,序列并不依附于表。通常情况下,一个序列为一个表提供主键值,但是一个序列也可以为多个表提供主键值。
     ♥ 语法:
          CREATE SQUENCE [schema.] sequence_name [START WITH i] [INCREMENT BY j]
                                                                                 [MAXVAULE m] [NOMAXVALUE]
                                                                                 [MINVALUE n] [NOMINVALUE]
                                                                                 [CYCLE | NOCYCLE ] [CACHE p | NOCACHE] 
     ♥ 注意:
        (1)序列的第一个序列值是 i ,步进是j 。
        (2)如果 j 是整数,表示递增,如果是负数,表示递减。 
        (3)序列可生吃的最大值是 m ,最小值是n
        (4)如果没有设置任何可选参数,序列的第一个值是 1 ,步进是1.
        (5)CYCLE 表示在递增至最大值或递减至最小值之后是否重用序列。入手递减并有最大值,从最大值开始。若没有, START WITH 指定的值开始。默认是 NOCYCLE
        (6)CACHE 用来指定先预取 p个数据在缓存在,以提高序列值的生成效率,默认是 20.
     ♥ 序列提供了两个伪列,用于向序列获取对应的数字:
    • NEXTVAL :获取序列下一个数字,第一次使用序列时,该伪列获取的是 START WITH 指定的数字,之后则是用当前数字加上步长得到的。
                    例如: SELECT swq_emp_empno_rs.nextval FROM dual
    • CURRVAL :获取序列当前数字。它必须在序列创建后,至少使用 NEXTVAL 生成过一个数字后才可以使用。                   
                    例如: SELECT swq_emp_empno_rs.currval FROM dual
         例如:使用序列生成的数字作为 emp_rs 表主键的值。
                   INSERT INTO emp_rs (empno,ename,sal,job,deptno) values(swq_emp_empno_rs.nextval,'JACKSON',5000,'CLERK',30)
     ♥ UUID --- 作为主键生成方式的一种,是一个不重复的 32 位字符串。
          例如:SELECT SYS_GUID() FROM dual
     ♥ 删除序列 --- DROP SEQUENCE sequence_name

三、索引:
     ♦ 索引 --- 一种允许直接访问数据表中某一数据行的树型结构,为了提高查询效率而引入,是独立于表的对象,可以存放在与表不同的表空间中。索引记录中存有索引关键字和指向表中数据的指针(地址)。
     ♦ 原理: B-tree 。
     ♦ 伪列,唯一标识一条数据记录,可理解为行地址。
     ♦ 语法:CREATE [UNIQUE] IDNEX index_name ON table(column[,column…])
—    Index_name 表示索引名称
—    Table表示表名
—    Column表示列名,可以建立单列索引或重合索引
—    UNIQUE表示唯一索引
     例如:在EMP_RS 表的 ename列上建立索引
              CREATE INDEX idx_emp_rs_ename ON emp_rs(ename)
               多列索引
              CREATE INDEX idx_emp_rs_job_sal ON emp_rs(job,sal)
     ♦ 注意:
        (1)索引会自动被套用,索引也是数据库自行维护的,我们唯一需要关心的就是是否添加索引。
        (2)如果经常在索引列上执行 DML 操作,需要定期重建索引,提高索引的空间利用率。      
     ♦ 多列索引 --- CREATE INDEX idx_emp_rs_job_sal ON emp_rs(job,sal)
         创建基于函数的索引 --- CREATE INDEX emp_rs_upper_idx ON emp_rs(UPPER(ename))
         修改索引 --- ALTER INDEX index_name REBUILD
         删除索引 --- DROP INDEX index_name
     ♦ 使用情况:
         (1)为经常出现在 WHERE 子句中的列创建索引。
         (2)为经常出现在 ORDER BY 、DISTINCT 后面的字段创建索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致。
         (3)为经常作为表的连接条件的列上创建索引
         (4)不要在经常做 DML 操作的表上建立索引
         (5)不要在小表上建立索引
         (6)限制表上的索引数目,索引并不是越多越好
         (7)删除很少被使用的、不合理的索引。

四、约束:
     ♣ 约束 --- 是在数据表上强制执行的一些数据校验规则,可以保证表中数据的完整性,保证数据间的商业逻辑
         分类:
    • 非空约束( NN ):用于确保字段值不为空
      •  (1)建表时添加非空约束
      •  (2)修改表时添加非空约束
      •  (3)采用重建表或修改表的方式取消非空约束
    • 唯一性约束( UK ): 用于保护字段或者字段的组合不出现重复值,当给表的某个列定义了唯一约束条件,该列的值不允许重复,但允许是 NULL 。唯一性约束条件可以在建表同时建立,也可以在建表以后再建立
      • 例如:在建表之后增加唯一性约束条件
                                        ALTER TABEL employees1 ADD CONSTRAINT employees1_name_uk UNIQUE (name)
    • 主键约束( PK ):可以用来在表中唯一的确定一行数据
      • 例如:建表后创建主键约束条件,并自定义约束条件名称
                                       ALTER TABLE employees1 ADD CONSTRAINT employees1_eid_pk PRIMARY KEY (eid)
    • 外键约束( FK ):定义在两个表的字段或一个表的两个字段上,用于保证相关两个字段的关系。
      • 例如:添加外键约束,先建表,在建表后建立外键约束条件
                                        ALTER TABEL employees1 ADD CONSTRAINT employees1_deptno_fk FOREIGN KEY (deptno) REFERENCES dept (deptno)
    • —检查约束(CK):用来强制在字段上的每个值都要满足Check中定义的条件,当定义了Check约束的列新增或修改数据时,数据必须符合Check约束中定义的条件
      • 例如:员工的薪水必须大于 2000 元
                              ALTER TABLE employees ADD CONSTRAIT employees_salary_check CHECK (salary > 2000)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值