服务器 频道

PL/SQL学习笔记之十

  【IT168 服务器学院】截取:
  不能回滚;
  删除表中所有数据;
  释放存储空间;
  语法: 
  TRUNCATE TABLE 表名称;

  DELETE 也可以删除所有行,但:
  可以回滚。
  不释放存储空间。

  给表加注释:COMMENT
  comment on table table_name is ''注释内容'';

  约束条件:
  如果经常用到约束条件的话,最好自己命名。
  当定义约束的时候可以将定义的语句作为CREATE TABLE 中的参数的一部分来完成。

  表级别约束定义:
  CONSTRAINT 约束名 约束条件(字段名)

  约束在表上强制了规则。
  如果有参照的花,约束防止表的删除。
  ORACLE支持的约束条件:
  NOT NULL 非空
   特点:唯一一个只能在列级定义的约束条件。
  UNIQUE 唯一
   允许有空值(空值不做比较);
  特点:当创建约束的时候,系统会自动创建对应其的索引。
  PRIMARY KEY 主键
   特点:当创建约束的时候,系统会自动创建对应其的索引。
  在一个表中只允许一个主键。  
  FOREIGN KEY 外键 
  外键参照的一定是主表的主键或唯一键;
  保证子表外键字段的值一定是主表中的被参照字段值的真子集;
  当主表字段被参照的时候,其值不允许被直接删除。
  CONSTRAINT 约束名 FOREIGN KEY (外键字段名) REFERENCES 主表名(主表字段名);

   如果在字段列表中定义外键就可以不写 FOREIGN KEY 关键字。
  如下格式:CONSTRAINT 约束名 REFERENCES 主表名(主表字段名);

  ON DELETE CASCADE  当主表的行被删除的时候,要删除子表中参照主表的行。
  ALTER TABLE TABLE_NAME DROP (PK) CASCADE CONSTRAINTS;把作为主键的字段也同时删除了。

  ON DELETE SET NULL 当主表的行被删除的时候,转换子表中的参照值为空。

  CHECK

  定义一个每行都必须满足的条件。
  CREATE TABLE table_name
  (
   ....
  salary number(10,2),
  CONSTRAINT 约束名 CHECK(SALARY>0),
   .... 
  );

  约束的使用:

  约束的命名:给约束命名或者ORACLE服务器将使用SYS_Cn的格式为约束命名。

  创建时期:

  在创建表的同时或者在建表之后。

  定义级别:

  可以在表级定义或列级定义。

  在数据字典中可以查看约束。

  使用ALTER TABLE 语句:

  *、添加或者删除约束条件,但是不能修改约束条件。
  就算列名上已经有约束条件,还可以继续添加约束条件的。
  添加: ALTER TABLE table_name ADD [CONSTRAINT ] 约束名 约束条件(column);
  删除: ALTER TABLE table_name drop constraint 约束名; 
  ALTER TABLE table_name PRIMARY KEY CASCADE;删除主键的时候,不用约束名。
  *、启动或禁用约束条件
  ALTER TABLE table_name Disable constraint 约束名; 禁用
  ALTER TABLE table_name ENABLE constraint 约束名; 启用
     
  *、通过MODIFY添加 NOT NULL 约束条件(因为NOT NULL为列级约束,只能用MODIFY添加)。
  ALTER TABLE table_name MODIFY(col type NOT NULL);

  查看约束条件:
  //desc user_constraints
  OWNER 拥有者;
  CONSTRAINT_NAME 约束名称
  CONSTRAINT_TYPE 约束类型

  SEARCH_CONDITION  check的条件
  

  select constraint_name, constraint_type,search_condition,status
  from user_constraint where table_name=''b'';

  视图 (VIEW) 一个或多个表的数据集的逻辑表示(虚表,不存储数据)。
  视图不能提高查询的性能。
  分类:
  简单
  数目:一个
  函数:不包含
  分组数据:不包含
  可以做DML操作
  复杂
  数目:一个或多个
  函数:包含
  分组数据:包含
  不一定能做DML操作

  视图也可以用DESC描述。

  创建视图:

  CREATE [or replace(修改视图)] [force/noforce] VIEW view_name(col coltype ,.......)
  as
  subquery
  [WITH CHECK OPTION [CONSTRAINT constraint]]
  [WITH READ ONLY[CONSTRAINT constraint]];

  USER_VIEWS 关于视图的字典

  修改视图:

  CREATE OR REPLACE 原视图名 (字段列表)
  AS 子查询;

  
  包含:
  GROUP BY
  DISTINCT
  ROWNUM
  不能对视图进行删除操作;

  包含:
  GROUP BY
  DISTINCT
  ROWNUM
  通过表达式定义的列
  不能对视图进行修改操作;

  包含:
  GROUP BY
  DISTINCT
  ROWNUM
  通过表达式定义的列
  在视图中没有包含基表中的 NOT NULL 列
  不能对视图进行插入操作;

  使用视图的原因;

  为了限制对数据的访问;
  为了使复杂的查询变得简单;
  提供了数据的独立性;
  提供了对相同数据的不同显示;

  使用WITH CHECK OPTION 子句创建视图

  创建视图时通过 WITH CHECK OPTION 子句确保执行的DML语句不会引起数据不出现在视图上。
  在对视图做DML操作的时候,一定要符合WHERE子句中的条件。
  CREATE OR REPLACE VIEW empvu20 as select * from employees
  where check option constraint [empvu20_ck];

  WITH READ ONLY
  不可以进行DML操作;

  删除视图:

  DROP VIEW view_name;

  行内视图:
  是一个在SQL语句中使用的带有别名的子查询,该子查询放在FROM之后;

  TOP-N:
  select [col_list],rownum rank(排名)
  from (select [col_list] from table_name order by top-n_col)
  where rownum<=n;

  序列(SEPUENCE)产生的顺序数字,单向递增或单向递减,且步长相同。

  索引(INDEX)用于提高查询性能。

  同义词(SYNONYM)对象的别名。
  create public synonym e for hr.employees;

  user_synonyms;

  创建同义词要有权限,访问的时候也需要权限。

0
相关文章