从零开始学Oracle―约束

时间:2022-04-30 13:14:52 其他范文 收藏本文 下载本文

“陈C姑娘”为你分享10篇“从零开始学Oracle―约束”,经本站小编整理后发布,但愿对你的工作、学习、生活带来方便。

从零开始学Oracle―约束

篇1:从零开始学Oracle―约束(三)

给表添加约束

主键约束 -- 每个表要有主键,唯一的标识一行数据

非空约束

唯一性约束

外键约束

检查约束

查看一个表的约束:

select constraint_name,constraint_type

from user_constraints

where table_name = '表名'

查看约束作用于那个字段:

select * from user_cons_columns

where CONSTRAINT_NAME='约束名;

1.建立表的同时使用约束

create table student( --学生表

xh number(4) primary key, --学号主键

xm varchar2(10) not null, --姓名不能为空

sex char(2) check (sex in ('男','女')), --性别

birthday date unique, --日期

sal number(7,2) check (sal between 500 and 1000),--奖学金 sal >=500 and sal <=1000

classid number(2) references cla(id)

); --必须要先有cla表才对

--一定先建立班级cla表

2.建立约束的同时给约束指定名字,便于删除

create table stu( --学生表

xh number(4) constraint pk_stu primary key, --学号是主键

xm varchar2(20) constraint nn_stu not null, --姓名非空

age number(2) constraint ck_stu check (age between 10 and 90),

birthday date,

shenfenzheng number(18) constraint uq_stu unique, --身份证唯一

classid number(2) constraint fk_stu references cla(id) -- 班级编号外键

--(引用的一定是另外表的主键或唯一性约束的字段)

);

3.建完表后加约束

添加主键约束:alter table student add constraint pk_stu primary key (xh);

添加非空约束:alter table student modify (xm not null);

检查约束:

alter table student add check(sex in ('男','女'));

alter table student add constraint ck_sal check(sal between 500 and 1000));

添加外键约束: alter table student add constraint fk_stu foreign key (classid) references cla(id);

添加唯一约束: alter table student add constraint uq_sfz unique(shenfenzheng);

4.删除约束:

格式:alter table 表名 drop constraint 约束名

alter table student drop constraint fk_stu;

篇2:ORACLE约束的属性

ORACLE约束的属性

今天处理了一个由于约束插入数据失败的问题,处理时感到有些吃力,三天不练手生啊,在这里回忆一下。

Oracle数据库Constraint约束的四对属性:Deferrable/not deferrable, Deferred/immediate, enable/disable, validate/novalidate。

准备一下环境:

SQL> create table empx as select * from emp;

SQL> create table deptx as select * from dept;

SQL> alter table empx add constraint pk_empx primary key(empno);

SQL> alter table deptx add constraint pk_deptx primary key(deptno);

SQL> alter table empx add constraint fk_deptx foreign key (deptno) references deptx(deptno);

SQL> select * from deptx;

[plain]

DEPTNO DNAME         LOC

--------- ------------------------------------------ ---------------------------------------

10 ACCOUNTING          NEW YORK

20 RESEARCH         DALLAS

30 SALES           CHICAGO

40 OPERATIONS          BOSTON

SQL> select * from empx;

[plain]

EMPNO ENAME       JOB          MGR HIREDATE   SAL COMM  DEPTNO

---------- ------------------------------ --------------------------- ---------- --------------- ---------- ---------- ----------

7369 SMITH       CLERK        7902 17-DEC-80   800      20

7499 ALLEN       SALESMAN       7698 20-FEB-81    1600  300    30

7521 WARD       SALESMAN       7698 22-FEB-81    1250  500    30

7566 JONES       MANAGER       7839 02-APR-81    2975      20

7654 MARTIN      SALESMAN       7698 28-SEP-81    1250 1400    30

7698 BLAKE       MANAGER       7839 01-MAY-81    2850      30

7782 CLARK       MANAGER       7839 09-JUN-81    2450      10

7788 SCOTT       ANALYST       7566 19-APR-87    3000      20

7839 KING       PRESIDENT       17-NOV-81    5000      10

7844 TURNER      SALESMAN       7698 08-SEP-81    1500   0    30

7876 ADAMS       CLERK        7788 23-MAY-87    1100      20

7900 JAMES       CLERK        7698 03-DEC-81   950      30

7902 FORD       ANALYST       7566 03-DEC-81    3000      20

7934 MILLER      CLERK        7782 23-JAN-82    1300      10

14 rows selected.

SQL> select constraint_name, SEARCH_CONDITION cond, STATUS, DEFERRABLE, DEFERRED, VALIDATED from user_constraints where table_name='EMPX';

[plain]

CONSTRAINT_NAME   COND    STATUS     DEFERRABLE   DEFERRED    VALIDATED

------------------------ ---------------- ------------------------ ---------------- ---------------- ------------

PK_EMPX         ENABLED     NOT DEFERRABLE IMMEDIATE    VALIDATED

FK_DEPTX         ENABLED     NOT DEFERRABLE IMMEDIATE    VALIDATED

SQL> insert into empx (empno,ename,job,mgr,hiredate,sal,deptno) values (8000,'TOM','SALESMAN',7839,sysdate,,50);

insert into empx (empno,ename,job,mgr,hiredate,sal,deptno) values (8000,'TOM','SALESMAN',7839,sysdate,2000,50)

*

ERROR at line 1:

ORA-02291: integrity constraint (SCOTT.FK_DEPTX) violated - parent key not found

这里通过emp和dept表创建了两张表empx和deptx,并在empx表上创建了外键约束fk_deptx。

1.Deferrable,not deferrable(default value)

1)这对属性是定义是否可以延时验证,deferrable是指作验证时机,如果在commit的时check为deferrable,否则为immediate .只有在设置Deferrable才可以设置另一属性Deferred,immediate.

2)这对属性是在创建的constraint的时候定义的,不能被修改.

notice:如果建立了Deferrable的uk或pk,只会建立相应的nonuniquce index,而不会建立uniquce index

SQL> alter table empx drop constraint fk_deptx;

SQL> alter table empx add constraint fk_deptx foreign key (deptno) references deptx(deptno) deferrable;

SQL> select constraint_name, SEARCH_CONDITION cond, STATUS, DEFERRABLE, DEFERRED, VALIDATED from user_constraints where table_name='EMPX';

[plain]

CONSTRAINT_NAME   COND    STATUS     DEFERRABLE   DEFERRED    VALIDATED

------------------------ ---------------- ------------------------ ---------------- ---------------- ------------

PK_EMPX         ENABLED     NOT DEFERRABLE IMMEDIATE    VALIDATED

FK_DEPTX         ENABLED     DEFERRABLE   IMMEDIATE    VALIDATED

SQL> insert into empx (empno,ename,job,mgr,hiredate,sal,deptno) values (8000,'TOM','SALESMAN',7839,sysdate,2000,50);

insert into empx (empno,ename,job,mgr,hiredate,sal,deptno) values (8000,'TOM','SALESMAN',7839,sysdate,2000,50)

*

ERROR at line 1:

ORA-02291: integrity constraint (SCOTT.FK_DEPTX) violated - parent key not found

在会话级设置:

SQL> set constraint FK_DEPTX deferred;

SQL> select constraint_name, SEARCH_CONDITION cond, STATUS, DEFERRABLE, DEFERRED, VALIDATED from user_constraints where table_name='EMPX';

[plain]

CONSTRAINT_NAME COND    STATUS     DEFERRABLE   DEFERRED      VALIDATED

---------------- ---------------- ------------------------ ---------------- --------------------------- ----------------

PK_EMPX       ENABLED     NOT DEFERRABLE IMMEDIATE     VALIDATED

FK_DEPTX       ENABLED     DEFERRABLE   IMMEDIATE     VALIDATED

SQL> insert into empx (empno,ename,job,mgr,hiredate,sal,deptno) values (8000,'TOM','SALESMAN',7839,sysdate,2000,50);

1 row created.

SQL> commit;

commit

*

ERROR at line 1:

ORA-02091: transaction rolled back

ORA-02291: integrity constraint (SCOTT.FK_DEPTX) violated - parent key not found

单独deferrable的含义就是是否允许约束检查延后进行。单独设置deferrable为deferrable之后,约束检查延后是不可以直接使用的,要配合deferred参数,如果该参数是immediate,那么约束还是在DML的时候进行应用。如果deferred参数设置为deferred,约束就是在事务commit提交的时候应用,出现错误就连带回滚rollback整个事务。

2.Deferred,immediate(default value)

deferred属性是配合deferrable属性使用的。当deferrable设置为deferrable之后,可以通过set constraints在会话级进行deferred属性的设置,来确定约束应用时点。

定义约束是使用initially关键字来确定约束的deferred属性取值。

SQL> alter table empx drop constraint fk_deptx;

SQL> alter table empx add constraint fk_deptx foreign key (deptno) references deptx(deptno) deferrable initially deferred;

SQL> select constraint_name, SEARCH_CONDITION cond, STATUS, DEFERRABLE, DEFERRED, VALIDATED from user_constraints where table_name='EMPX';

[plain]

CONSTRAINT_NAME COND    STATUS     DEFERRABLE   DEFERRED      VALIDATED

---------------- ---------------- ------------------------ ---------------- --------------------------- ----------------

PK_EMPX       ENABLED     NOT DEFERRABLE IMMEDIATE     VALIDATED

FK_DEPTX       ENABLED     DEFERRABLE   DEFERRED      VALIDATED

SQL> insert into empx (empno,ename,job,mgr,hiredate,sal,deptno) values (8000,'TOM','SALESMAN',7839,sysdate,2000,50);

1 row created.

SQL> commit;

commit

*

ERROR at line 1:

ORA-02091: transaction rolled back

ORA-02291: integrity constraint (SCOTT.FK_DEPTX) violated - parent key not found

可以通过创建contraint时指定Deferred值,也可以通过会话级别的语句SET CONSTRAINT(s)来设置(如上面的set constraint FK_DEPTX deferred),

当属性DEFERRABLE和DEFERRED的值分别为DEFERRABLE和DEFERRED时,在事务提交时才验证,如果验证没通过,则报错,事务回滚。

3. novalidate, validate(default value)

定义是否对表中已经存在的数据作检查。

删除约束并插入一条脏数据:

SQL> alter table empx drop constraint fk_deptx;

Table altered.

SQL> insert into empx (empno,ename,job,mgr,hiredate,sal,deptno) values (8000,'TOM','SALESMAN',7839,sysdate,2000,50);

1 row created.

SQL> commit;

Commit complete.

SQL> alter table empx add constraint fk_deptx foreign key (deptno) references deptx(deptno);

alter table empx add constraint fk_deptx foreign key (deptno) references deptx(deptno) deferrable initially deferred

*

ERROR at line 1:

ORA-02298: cannot validate (SCOTT.FK_DEPTX) - parent keys not found

SQL> alter table empx add constraint fk_deptx foreign key (deptno) references deptx(deptno) deferrable initially deferred;

alter table empx add constraint fk_deptx foreign key (deptno) references deptx(deptno) deferrable initially deferred

*

ERROR at line 1:

ORA-02298: cannot validate (SCOTT.FK_DEPTX) - parent keys not found

语句中不带validate属性参数,默认创建的是validate的约束。由于有脏数据的存在,不管是创建延时还是非延时的约束都不成功。

SQL> alter table empx add constraint fk_deptx foreign key (deptno) references deptx(deptno) novalidate;

Table altered.

创建novalidate的约束成功。

SQL> select constraint_name, SEARCH_CONDITION cond, STATUS, DEFERRABLE, DEFERRED, VALIDATED from user_constraints where table_name='EMPX';

[plain]

CONSTRAINT_NAME COND    STATUS     DEFERRABLE   DEFERRED    VALIDATED

---------------- ---------------- ------------------------ ---------------- ---------------- ----------------

PK_EMPX       ENABLED     NOT DEFERRABLE IMMEDIATE    VALIDATED

FK_DEPTX       ENABLED     NOT DEFERRABLE IMMEDIATE    NOT VALIDATED

SQL> select * from empx;

[plain]

EMPNO ENAME     JOB          MGR HIREDATE   SAL COMM  DEPTNO

----- ------------------------------ --------------------------- ---------- --------------- ---------- ---------- ----------

7369 SMITH     CLERK        7902 17-DEC-80   800      20

7499 ALLEN     SALESMAN       7698 20-FEB-81    1600  300    30

7521 WARD      SALESMAN       7698 22-FEB-81    1250  500    30

7566 JONES     MANAGER       7839 02-APR-81    2975      20

7654 MARTIN       SALESMAN       7698 28-SEP-81    1250 1400    30

7698 BLAKE     MANAGER       7839 01-MAY-81    2850      30

7782 CLARK     MANAGER       7839 09-JUN-81    2450      10

7788 SCOTT     ANALYST       7566 19-APR-87    3000      20

7839 KING      PRESIDENT       17-NOV-81    5000      10

7844 TURNER       SALESMAN       7698 08-SEP-81    1500   0    30

7876 ADAMS     CLERK        7788 23-MAY-87    1100      20

7900 JAMES     CLERK        7698 03-DEC-81   950      30

7902 FORD      ANALYST       7566 03-DEC-81    3000      20

7934 MILLER       CLERK        7782 23-JAN-82    1300      10

8000 TOM        SALESMAN       7839 15-JUL-12    2000      50

有一条脏数据存在,看看能不能再增加一条:

SQL> insert into empx (empno,ename,job,mgr,hiredate,sal,deptno) values (8001,'TOM','SALESMAN',7839,sysdate,2000,50);

insert into empx (empno,ename,job,mgr,hiredate,sal,deptno) values (8001,'TOM','SALESMAN',7839,sysdate,2000,50)

*

ERROR at line 1:

ORA-02291: integrity constraint (SCOTT.FK_DEPTX) violated - parent key not found

不能增加违反约束的数据,novalidate的约束只是对原来的数据库不做验证,但对新插入的数据还是要进行验证的。

4. disable, enalbe(default value)

启用和禁用constraint.如果在新建pk和uk时定义了disable,将不建立相应的索引.

SQL> alter table empx disable constraint fk_deptx;

Table altered.

SQL> select constraint_name, SEARCH_CONDITION cond, STATUS, DEFERRABLE, DEFERRED, VALIDATED from user_constraints where table_name='EMPX';

[plain]

CONSTRAINT_NAME COND    STATUS     DEFERRABLE   DEFERRED    VALIDATED

---------------- ---------------- ------------------------ ---------------- ---------------- ----------------

PK_EMPX       ENABLED     NOT DEFERRABLE IMMEDIATE    VALIDATED

FK_DEPTX       DISABLED    NOT DEFERRABLE IMMEDIATE    NOT VALIDATED

SQL> insert into empx (empno,ename,job,mgr,hiredate,sal,deptno) values (8001,'TOM','SALESMAN',7839,sysdate,2000,50);

1 row created.

SQL> commit;

Commit complete.

禁用了约束后,脏数据也能插入成功。

SQL> alter table empx enable constraint fk_deptx;

alter table empx enable constraint fk_deptx

*

ERROR at line 1:

ORA-02298: cannot validate (SCOTT.FK_DEPTX) - parent keys not found

SQL> select constraint_name, SEARCH_CONDITION cond, STATUS, DEFERRABLE, DEFERRED, VALIDATED from user_constraints where table_name='EMPX';

[plain]

CONSTRAINT_NAME COND    STATUS     DEFERRABLE   DEFERRED    VALIDATED

---------------- ---------------- ------------------------ ---------------- ---------------- ----------------

PK_EMPX       ENABLED     NOT DEFERRABLE IMMEDIATE    VALIDATED

FK_DEPTX       DISABLED    NOT DEFERRABLE IMMEDIATE    NOT VALIDATED

SQL> alter table empx enable novalidate constraint fk_deptx;

Table altered.

SQL> select constraint_name, SEARCH_CONDITION cond, STATUS, DEFERRABLE, DEFERRED, VALIDATED from user_constraints where table_name='EMPX';

[plain]

CONSTRAINT_NAME COND    STATUS     DEFERRABLE   DEFERRED    VALIDATED

---------------- ---------------- ------------------------ ---------------- ---------------- ----------------

PK_EMPX       ENABLED     NOT DEFERRABLE IMMEDIATE    VALIDATED

FK_DEPTX       ENABLED     NOT DEFERRABLE IMMEDIATE    NOT VALIDATED

如果有脏数据,启用约束时要同时设置novalidate。

由上面的实验得知,默认情况下,Oracle constraint是不开启延迟约束和原有数据保留验证的。

下列情况下可以使用这些特性:

1)批量数据导入、物化视图刷新的时候,事务量很大,而且存在数据规律前后颠倒的情况

此时,如果开启着立即约束应用的开关,可能存在一些暂时性的约束不满足的情况,从而影响到整个系统的运行。开启约束延迟验证,就可以帮助我们解决这个问题;

2)在历史数据移植

历史数据存在不规则的情况,很多时候难以满足我们新系统的数据完整性要求。可以使用not validate的方式,对历史数据不进行约束控制,而只针对新数据开启验证。

作者 ilovemilk

篇3:从零开始学Oracle―异常处理(八)

一、异常

(1) 程序错误

- 编译时

- 运行时

(2)异常

- 处理运行时错误

.PL/SQL是如何处理异常的?

- 错误引发异常

- 每当引发异常时,都将控制权传递给异常处理程序

- 异常处理程序处理异常

.异常中涉及的步骤

- 声明异常

- 引发异常

- 处理异常

.异常的类型

- 预定义的异常 --由Oracle服务器维护异常

- 非预定义的异常 又称'用户定义异常'

1、预定义异常

由Oracle为常见错误预定义

在DBMS_Standard程序包中提供了这些定义

不需要显式声明

declare

empJob emp.job%type;

begin

select job into empjob from emp where empno=0000;

DBMS_output.put_line('Employee job is '||emjob);

Exception

when No_data_found then

DBMS_output.put_line('错误了,查询没有返回行');

when too_many_rows then

DBMS_output.put_line('错误了,查询返回了多条数据');

when zero_centeride then

DBMS_output.put_line('错误了,除数不能为零');

when others then --一定是最后一个处理的代码

DBMS_output.put_line('错误了,未知的错误信息');

end;

2、非预定义异常

无法预知的错误,如网络不通、服务没有启动、或其他错误,这样的异常需要用户要定义

declare

PK_conflict Exception; --用户定义异常

iCount int:=0;

begin

select count(*) into iCount from emp where empno='7369'

if iCount>0 then

raise Dup_Value; --引发异常

end if;

Exception

when PK_conflict then --处理异常

DBMS_output.put_line('表中已经有这条记录了');

end;

/

以上代码的问题是,只有条件满足 才会引发异常,否则永远都不会执行此句.

并且当有多个语句都有可能会引发此异常时,代码就过于冗余.并且都要显示

的引发异常,能不能让系统帮我们维护自定义异常了,当有异常引发时 自动

通知Oracle服务器处理异常

pragma指令

declare

PK_conflict Exception; --用户定义异常

pragma Exception_init(PK_conflict -1); --编译指令 可以把异常捆绑到Oracle 并覆盖预定义的异常

iCount int:=0; 这里的-1 代表主键冲突

begin

insert into emp(empno,ename) values('7369','FeiYang');

Exception

when PK_conflict then --处理异常

DBMS_output.put_line('表中已经有这条记录了,主键冲突');

end;

为了给用户友好的错误提示.用此函数可以定义友好的提示,

从零开始学Oracle―异常处理(八)

DBMS_output.put_line函数只有sqlPlus 客户端支持.

Raise_Application_Error

.用于创建用户定义的错误消息的过程

.可以再执行部分和异常部分使用

.必须介于 -20000 和 -20999之间

.可以存储2M的错误信息

declare

PK_conflict Exception; --用户定义异常

pragma Exception_init(PK_conflict -1); --编译指令

iCount int:=0;

begin

insert into emp(empno,ename) values('7369','FeiYang');

Exception

when PK_conflict then --处理异常

Raise_Application_Error(-20001,'表中已经有这条记录了'); --注意参数的前后顺序

end;

常见系统异常参考表:

1命名的系统异常产生原因

2 access_into_null 未定义对象

3 CASE_NOT_FOUND CASE 中若未包含相应的 WHEN ,并且没有设置 ELSE 时

4 COLLECTION_IS_NULL 集合元素未初始化

5 CURSER_ALREADY_OPEN 游标已经打开

6 DUP_VAL_ON_INDEX 唯一索引对应的列上有重复的值

7 INVALID_CURSOR 在不合法的游标上进行操作

8 INVALID_NUMBER 内嵌的 SQL 语句不能将字符转换为数字

9 NO_DATA_FOUND 使用 select into 未返回行,或应用索引表未初始化的元素时

10 TOO_MANY_ROWS 执行 select into 时,结果集超过一行

11 ZERO_DIVIDE 除数为 0

12 SUBSCRIPT_BEYOND_COUNT 元素下标超过嵌套表或 VARRAY 的最大值

13 SUBSCRIPT_OUTSIDE_LIMIT 使用嵌套表或 VARRAY 时,将下标指定为负数

14 VALUE_ERROR 赋值时,变量长度不足以容纳实际数据

15 LOGIN_DENIED 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码

16 NOT_LOGGED_ON PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据

17 PROGRAM_ERROR PL/SQL 内部问题,可能需要重装数据字典& pl./SQL 系统包

18 ROWTYPE_MISMATCH 宿主游标变量与 PL/SQL 游标变量的返回类型不兼容

19 SELF_IS_NULL 使用对象类型时,在 null 对象上调用对象方法

20 STORAGE_ERROR 运行 PL/SQL 时,超出内存空间

21 SYS_INVALID_ID 无效的 ROWID 字符串

22 TIMEOUT_ON_RESOURCE Oracle 在等待资源时超时

23

24

篇4:从零开始学Oracle―内建对象(五)

1.序列

查询当前用户下的序列:select * from user_sequences

定义:用来生成唯一、连续的整数的数据库对象,序列通常用来自动生成主键或唯一键的值、可升、可降序排列.

语法:Create sequence 序列名称 //从1开始 每次自动增加1 没有最大值

[star with 值] 指定要生成的第一个序列号,对于升序默认值为最小值、反之...

[increment by 值] 间隔数

[maxvalue 值|nomaxvalue] 序列最大值,如果指定为nomaxvalue,则升序最大值为10的27次方,降序-1.

[minvalue 值|nominvalue] 序列最小值,-----------------------升序为1,降序为10的负26次方

[cycle|nocycle] cycle指序列到达最大或最小时,将从头开始生成值 nocycle值不在生成

[cache 值|nocache] 预先分配一组序列号,将其保存在内存中. 默认缓存20个序列

访问序列方法: currval 和nextval --当前序列 select 序列名.currval from dual

更改序列:Alter sequence 序列名

删除序列:drop sequence 序列名

注意-------------序列使用时需要先用nextval输出完以后再来使用

使用:

1.和表关联作为表的字段的值

a) create table student(

xh number(4) primary key, --学号

xm varchar2(20) not null --姓名

);

要求:学号字段 从1000开始每次增加4 最大值9999

--建立序列

create sequence xh_seq

start with 1000 --从1000开始

increment by 4 --每次增加4

maxvalue 9999 --最大值 9999

;

--使用SQL语句关联

insert into student values

(xh_seq.nextval,'Mike');

insert into student values

(xh_seq.nextval,'John');

insert into student values

(xh_seq.nextval,'Rose');

--特点:能产生唯一的值,但是不能保证值在表中的连续性

b) create table teacher(

teacherxh varchar2(10) primary key,

teachername varchar2(20)

);

要求:教师的编号的格式是TH00001

TH00002

....

--建立序列

create sequence teacher_seq

maxvalue 99999;

--

insert into teacher values ('TH'||

ltrim(to_char(teacher_seq.nextval,'00000')),

'张三');

insert into teacher values ('TH'||

ltrim(to_char(teacher_seq.nextval,'00000')),

'李');

insert into teacher values ('TH'||

ltrim(to_char(teacher_seq.nextval,'00000')),

'王');

2.视图

查看当前用户下的视图:select view_name from user_views;

作用:隐藏数据,增加系统的安全性

语法:Create [or replace] [Force|noForce] veiw 视图名 [(别名1,别名2...)]

AS 子查询

[with check option [constraint 约束名]]

[with read only] 视图是只读的

其中:or replace 表示替代已经存在的视图

force 表示不管基表是否存在,创建视图

noforce 表示只有基表存在时,才创建视图.

别名是为子查询中选中的列新定义的名字,替代查询表中原有的列名,

从零开始学Oracle―内建对象(五)

with check option 对视图操作时必须满足子查询的约束条件。后面的约束名是该约束条件的名字

删除视图者需要是视图的建立者或者拥有DROP ANY VIEW权限。视图的删除不影响基表,不会丢失数据

对视图操作需满足以下条件:

<1>建立视图的select语句必须是简单的select语句

简单:不能是多表的查询

不能有分组函数

<2>建立视图的时候不能带with readonly关键字

例:

create or replace view emp_v2

as --select语句

select empno,ename,sal from emp

with read only; --只读视图

3.同义词

查看用户创建的同义词:select * from user_synonum;

定义:数据库对象的一个别名

用途:1.简化SQL

2.隐藏对象名称和所有者

3.为分布式数据库的远程对象提供了位置透明度

4.提供对象的公共访问

注意:使用同义词前需要确保用户得到访问同义词的权限

同义词分为:

1.私有同义词 --只能被当前用户模式访问 要在自身模式下创建须 Create synonum 权限

2.共有同义词 --须Create any synonym权限

语法: Create [or replace] [public] synonym 同义词名称 for 要创建同义词对象的名称

4.索引

作用:加快查询 索引一定是建立在表上的.

语法:Create Index 索引名 on 表名(列名)

创建唯一索引: Create unique Index 索引名 on 表名(列名)

创建位图索引: Create bitmap Index 索引名 on 表名(列名)

数据的不同值对于记录的行数来说 是个很小的数 这种字段适合使用位图索引 它比普通索引效率高

不能用索引的条件:

<1>规则1:索引的字段不能参与运算

<2>规则2:索引的字段上不能使用函数

5.簇

定义:用于多表联合查询,提高数据查询效率

1.簇的创建必须在创建表结构时指定

2.如果使用簇,则两个表必须要有主外键关系

簇的使用步骤:

1.创建簇 Create cluster 簇名称(字段名 数据类型);

2.创建主键表使用簇

Create table depa (

deptno number(2) primary key,

dname varchar2(20)

) cluster 簇名(deptno);

3.创建外键表使用簇

Create table empa(

empno number(4) primary key,

ename varchar2(20)

) cluster 簇名(empno)

4.在簇上建立索引

Create Index 索引名 on cluster 簇名

篇5:从零开始学Oracle―性能对象(六)

Oracle性能对象

要点:分区必须是在创建表的结构时指定,分区方式一旦指定是不能改变的,

分区方式:

1 范围分区

2 散列分区

3复合分区

3列表分区

表分区的优点:

一、改善表的查询性能

二、表更容易管理,表的数据存储在多个部分,按分区加载和删除数据更快

三、便于备份和恢复

四、提高数据安全性

-----------注意:要分区的表不能具有Long和Long raw数据类型

范围分区:根据表的某个列或一组列的值范围,决定将数据存储在那个分区

create table niegc_part

(

part_id integer primary key,

part_date date,

part_dec varchar2(100)

)

partition by range(part_date)--根据日期分区

(

partition part_01 values less than(to_date('-01-01','yyyy-mm-dd')) tablespace dw1,

partition part_02 values less than(to_date('-01-01','yyyy-mm-dd')) tablespace dw2,

partition part_03 values less than(maxvalue) tablespace dw1

);

散列分区

散列分区通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区

,使行这些分区大小一致。如将part_id的数据根据自身的情况散列地存放在指定的二个表空间中:

create table niegc_part

(

part_id integer primary key,

part_date date,

part_dec varchar2(100)

)

partition by hash(part_id)

(

partition part_01 tablespace dw1,

partition part_02 tablespace dw2

);

--系统将按part_id将记录散列地插入二个分区中,这里也就是二个不同的表空间中。

复合分区:范围分区和散列分区的结合

--语法

partition by range(列1)

subpartition by hash(列2)

subpartition 分区数目 [tore in (表空间1,表空间2)]

partition part1 values less than (值1),

partition part2 values less than (maxvalue)

--例:对emp表的复合分区,先按薪资分再按部门分

partition by range(sal)

subpartition by hash(empno)

(

partition p1 values less than('1501')

(

subpartition sp1 tablespace a1,

subpartition sp2 tablespace a2

)

partition p2 values less than('3001')

(

subpartition sp3 tablespace a1,

subpartition sp4 tablespace a2

)

)

--查看表分区

select * from emp partition(p1)

select * from emp subpartition(sp1)

列表分区:允许用户明确地控制行到分区的映射

--语法

partition by list(列名)

partition part1 values(值1),

partition part2 values(值2),

partition part3 values(default)

--default关键字用于存储前面的分区不能存储的记录

)

分区的维护操作

1.添加分区

alter table Table add partition 分区名 values less than (值)

如果边界是maxvalue 使用split partition语句

alter table Table split partition 分区名 at (值)

2.删除分区

alter table Table drop partition 分区名

3.截断分区 (只删除记录,不删除结构)

alter table Table truncate partition 分区名

4.合并分区

alter table Table merge partitions p1,p2 into partition p2

5.拆分分区

alter table Table split partition 分区1 at (值) into(partition 分区1,partition 分区2)

6.移动分区

alter table Table move partition 分区 tablespace(表空间名)

篇6:约束

约束,这普通的两个字,却让我们小学生头疼.从一年级起,这头疼的事就开始了.不仅要受到爸爸妈妈的约束,还要受到老师的约束.

为何,为何我们不能自由?

老师们一直认为,只要这个孩子不听他一句话,就觉得这个孩子是个坏孩子.长大了一定没出息,不能成为国家的栋梁.大人们认为只要这个孩子要摆脱约束,这个孩子一定是个野孩子.

但你们为何不换个方面想想,如果大人们肯放开那约束的绳子,孩子们会明白,原来自己的爸爸妈妈是相信自己的.这样,他会以这个想法而努力,而奋斗.

为何,为何我们不能自由?

你们可知道,自由对一个孩子而言是多么的重要.家长一天到晚的不许这不许那,你们有没有想过我们的感受.我们会怎样想.

许多孩子正是因为父母的约束,老师的约束,才使他变坏.

为何,为何我们不能自由?

大人们,老师们,请你们放开那约束的长绳,让我们在坎坷的道路上一步步向前走!

篇7:Oracle 9i 约束条件数据库教程

约束条件就是Oracle数据库系统提供的对数据的完整性进行制约的机制,

Oracle 9i 约束条件数据库教程

。Oracle 9i允许创建5种约束条件。参见表7.8。

创建检查约束条件

(1)在【管理目标导航器】中按照7.6节修改数据表结构的步骤进行操作。

(2)切换到图7.61所示的编辑表的【约束条件】选项卡。

(3)上述创建检查约束条件的SQL码如下?br>    �D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D

ALTER TABLE “SCOTT”.“STUDENT”

ADD (CONSTRAINT “研究生编号检查约束条件”

CHECK(student_id>= and student_id<=0909))

�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D

【参见光盘文件】:第7章 createcheck.sql。

(4)读者也可以直接在【SQLPlus Worksheet】中执行createcheck.sql 文件完成检查约束条件的创建,如图7.62所示,

测试检查约束条件

(1)在7.63所示的【表数据编辑器】界面中按照图示内容输入,单击“应用(P)”按钮。

(2)上述输入数据的SQL代码如下。

�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D

INSERT INTO “SCOTT”.“STUDENT”

(“STUDENT_ID” ,“NAME” ,“PROFESSIONAL” ,“BIRTHDAY” ,“DIRECTOR_ID” )

VALUES (20010101 ,'纪晓芙' ,'软件工程' ,TO_DATE('15-7月 -1971', 'dd-Mon-yyyy HH:MI:SS AM') ,01)

�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D�D

【参见光盘文件】:第7章 testcheck.sql。

(3)出现如图7.64所示界面。

(4)读者也可以直接在【SQLPlus Worksheet】中执行testcheck.sql 文件完成检查约束条件的测试,结果如图7.65所示。

篇8:从零开始

史蒂文生说过:人生并不总是幸运的结果,客观存在常常是一种德行,一种勇敢的德行。诚然,人生之曲折迂回,面对分道岔,我们要具备两种勇气:从零开始,从头再来“不从零开始,。

从零开始是一种从头再来的,从头开始的无畏,按老再次探寻的。

“破釜沉舟,百二秦关终属楚;卧薪尝胆,三千越甲可吞吴”。他,曾垂坐宫堂,指点江山;他,曾沉湎迷失,酒池肉林。然而当夫差的甲兵攻破他家园的时候,他没有拔剑自刎,让鲜血染红夕阳。他在心头埋下复国的种子,从头再来,夺回属于自己的家国。从零开始,勾践卧薪尝胆,从零开始,勾践屈身侍吴,从零开始,勾践扶起了越国已倒下的江山,而最终又位及人王。从零开始,重振越国雄风,名留百世。

不从零开始是一种不轻易放弃的胆识,不因循守旧的开创,是另辟蹊径的智慧。他曾是泰国商界叱咤风云的人物。他曾纵横商场,商场得意,半生风流。然而风水轮流,昨天的得意洒脱,今天的潦穷困,在商界演绎的如此透彻。他投资失利,血本无归。面对人生的岔道,他没有因循老,重进商坛。施利华不从零开始,卖起了自己的“三明治”。不从零开始,施利免去了商界此起彼伏浮的冲击;不从零开始,施利华的航船;不从零开始,施利华收获了一个照样辉煌的人生。从零开始是一种坚定,不从零开始亦是一种;从零开始是一种无畏,不从零开始亦是一种勇敢;从零开始是种洒脱,不从零开始亦是一种狂放;从零开始是一种自信,不从零开始亦是一种真我。

人生曲曲折折,重重叠叠。在奔走和泅渡的'我们,面对纷纭的人生与既应有从零开始的无畏,也要有不从零开始的胆识,这样,我们才能赏积翠如云的空�魃缴�,听浪花生风的自然空明,才能“倚天仗剑观沧海,斜插芙蓉醉瑶台”,才能欣赏人生的美丽。

篇9:从零开始

在那个桃花季,我开始了自己的钢琴生涯,一切都从零开始…

这是一个美丽的夜晚,橙色的光和阴影漂浮着。我妈拉着我的手来到余老师家。老师家的空气里流淌着优雅和浪漫,老师指尖下流淌的音乐就像甘甜的泉水滋润着我的心田!我无限崇敬地盯着老师,无限迷恋地盯着钢琴。余老师拉着我的小手,抚摸着黑白键。她的香韵至今留在我的耳中:“卞,钢琴被称为‘乐器之王’,也可以说是一门非常难学的技艺。你不能半途而废!”我心里还记得钢琴那甜美悠扬的独特韵脚。我点点头,毫不犹豫地回答:“我一定坚持!”

在接下来的学钢琴的日子里,我深深的体会到学钢琴有多难!

第一节课,老师讲了弹钢琴时的手部姿势。想象一下,手里拿着一个鸡蛋,手指不要太松,也不要太紧。关键是玩的时候保持这个姿势不变!我觉得:这个小把戏太简单了。小菜一碟。它打不过我!结果这个动作我练了十遍还是做不完美。往往弹起来的时候,小指会不经意的翘起来。因为无名指太弱,弹起来就成了“平指”。所以,我没少受到老师的批评。琴琴,爱你不容易!

我练基本功一年多了。终于有一天,余老师对我说:“今天,让我们在双手的配合下,学习演奏柴可夫斯基的《四小天鹅舞曲》。”我真是欣喜若狂!从那以后,我每天放学后都练习钢琴。一个星期后,这首悠扬的旋律终于在我的小房间里平稳地响起,我甚至感觉到我的小指变成了在碧波上游动的小天鹅!但是回教室的前一天晚上,我突然发现手指疼得厉害。我一抬头手指,我的天,中指上出现了一个水泡――。我只好向妈妈求助,妈妈难过地说:“宝贝,你练得太辛苦了。你两三天没注意到水泡!明天,我们就放假了!”但是,我没有被“水泡”打败,第二天还是坚持去上课。我的老师听了我的表演后表扬了我的才华!哦,老师怎么知道我背后的艰辛?

钢琴钢琴,爱你!我会以每一次学习为起点,用你来演奏我华丽的篇章!

篇10:从零开始

上个世纪的一个黎明,在巴黎乡下,一位大文豪“每天拼命工作,不接待来访,不看报纸,按时看日出……”

这位大文豪用自己的行动在告诉我们:让每一天“从零开始”。

清泉寺旁,兰溪水畔,是谁在吟诵:“谁道人生无再少?门前流水尚能西,休将白发唱黄鸡。”

是苏轼,这位大词人以豪情来鼓励我们:让心中的人生“从零开始”。

从零开始,是要我们将心置于原点,不要让过去的失败牵绊前行的双脚,不要让过去的成功黏住信念的发条,将心境归于平和,让人生再回“年少”。

从零开始,于是有了珠穆朗玛从海底崛起的巍峨壮观,于是有了“冬天来了,春天就不会远”的期盼,于是有了“月缺花残莫怆然”的宽慰。

这里有白手起家的传奇故事,世界首富比尔?盖茨,不就是身揣两美元而来的吗?他并没有因贫穷困苦而懊恼命运,他只是将自己放在两美元的起点,起跑、飞奔……这里有蹶而复起的盖世英雄,前苏联一位飞行员截腿安上假肢之后,以惊人的毅力重新站起,再度继续他的飞行生涯。

正是对“从零开始”的信赖和执着,成就了这两段成功的人生。

从零开始,圆了多少人的梦想,回报了多少人的辛劳?反思自己,是否仍每日赖在被窝里迟迟不起,恨不得每日清晨日落西?是否仍在命运的弯路岔路蒙面痛哭,悔不当初?丢失了回到起点的信心和勇气?

不要在一旁空叹“船到江心补漏迟”,请余出空闲将记忆的钟表调到零点,让你怀着零时的希望与抱负重新投入你的追求——满怀热情,而不是满怀悔恨的追求。

从零开始,撇开旧日的辉煌与黯然,迎接新一天的美好时光。

看,那浴火的凤凰,已重生了!

我呆呆地在树下躺了一整天。

同学不屑的目光,父母失望的神情,老师重重的叹息。快乐似乎已不再属于我。“失败者”,我极不情愿地让这个词挤入脑海,泪水也毫无阻挡地奔涌而出。抬头望去,天边的一轮夕阳红得是那么耀眼。我抹去眼泪,长长舒了口气,准备回家,却意外地发现夕阳的余辉中一个小黑点儿在晃动。仔细一看,是只小蜘蛛,吊在一根长长的蛛丝上,缩成一小团。我想:你也是个失败者吧,没有网的小东西!但不一会儿,苦笑着的我却看到它慢慢舒展着细腿,开始在我头顶忙碌。好奇心让我目不转睛地盯着这个小黑点儿,想看它到底要干什么。蜘蛛一刻不停地干着,短短几分钟便织出一张是它好几百倍的网来,然后回到网心,静静地趴在那儿一动不动。

这是我头一次无次靠近大自然的艺术品,但沮丧的心情却令我对成功的小蜘蛛产生了一种莫名其妙的怨恨。我用数值狠狠地搅破了蛛网。那小东西似乎是受到了惊吓,又缩成了小团。我嘲笑它的胆小,但同时也意识到我是在嘲笑自己的懦弱。于是在这次无聊的报复后,我痛苦的闭上眼睛。考试的情景历历在目,我不愿想,却又无能为力,眼泪又流了下来。

深呼吸后,我再次抬起头,竟诧异的发现眼前又出现了一张蜘蛛网,而且比刚才的更圆,更大,网心却还是那小得不能在小的蜘蛛。我能察觉到自己当时那种目瞪口呆的表情。“可恶!”我咒骂着,再一次毁掉了这件艺术品。蜘蛛险些掉在地上,一根扯断的蛛丝救了它。它半天没有动静。“不行了吧,你!”一种快感油然而生。我坏笑着,准备看着这小东西灰溜溜地从我眼前爬走。然而,它第三次坚定地向上爬去,准备在同一个地方织第三张网。笑容在我脸上僵住了。嘎然而止的笑声后,我似乎明白了什么。

有位哲人曾经说过:失败是人生的十字路口,从零开始,才可能有永远的新天地。

蛛网完成了,比前两张更加完美无缺。但,这次我没有去再去破坏,而是小心翼翼地坐起来,留它在飒飒的晚风中。我慢慢走着,感觉脸上的泪已经被风吹干。拍掉身上的泥土与落叶,低头看时,发现自己正站在一条望不到尽头的小路,突然想到:难道这不正是我的零点吗?于是,我振作精神,迈开大步,向路的那一端跑去。因为我知道,那远远望不到的地方一定与世上最美的夜空相连。就算失败也没关系,因为我可以从零开始。

岁月的无情,现实的残酷。我面对这些也只能底下倔强的头,然后流下一滴泪,重新抬起头,坦然一笑,告诉全世界我能从零开始。

从零开始,代表我将抛开从前所拥有的,即便那些东西不能挥之而去哪它将定格在记忆里。

友情,长达3年的友情埋在这慢慢岁月里,它是重要的,是珍贵的,而只因为自己的顽劣将画上省略号。我们一起走过的路一起玩耍过的天地,共同经历风雨,互相安慰,唱的同样一首歌……我只能把它们放在哪长长的省略号中,流下美好的回忆。

在这篇友谊的文章中,我把手挪动到另一段在重新开始。这是艰难的但却同时给了我一个新的开始。从零开始。

省略号中遗留的友情我难舍没从零开始给自己一个机会。我相信能从零开始。

梦。每个人都有一个属于自己的梦。当梦破碎,如同柳絮一般飘散在空中,我们只好烟头看着梦一点点的飘远,我们不是悲伤而是幸福的,这证明我们又拥有一个可以为自己编制梦的机会。从零开始。

从零开始一点点小心编制着梦,辛苦但却美好,笑容荡漾在脸上,有说不出的美好。

失去是难过的是悲伤的,从零开始是艰难的,可我们在不停的失去,而我么不能永远活在曾经的记忆里,给自己一个从零开始的机会,就能对一份快乐。

蓝蓝的天空下,只有一个自己,身边一切为零,我笑,流出了泪,但是笑容仍留在脸上,就让曾经成为最美好的记忆,给自己一个机会从零开始。

我相信我能从零开始,因为我已经站在一个新的起点上……

为什么有些人在他并不擅长的领域内却依然成功?是运气?还是那高的吓人的智商?都不是,他们之所以成功原因是的因为他们那顽强的毅力和不懈努力。他们一开始和我们一样,都是从零开始的。

股神巴菲特曾经说过一句话:“我并不喜欢炒股,但既然我选择了这个事业,我就要把它做到最好!”三百六十行,行行出状元,每个人的起点都是相同,只是每个人的起跑方式不同而已,有的人用腿跑,有的人却用手爬?没有最烂的行业,只有最烂的人(此行业中)。

在我以前的小学旁,从我上一年级开始,旁边便一直有一个修鞋铺,一年四季,风雨无阻。修鞋铺理的王师傅是这店的唯一主人,他带着一双略带少许沟壑的老花眼镜,脸上布满了岁月的痕迹,那双大大的曾经必然十分明亮的眼睛现在已是一片浑浊,手上长满了不知已经破过多少次的坚硬的老茧。在营业期间,他永远穿着一身油光闪闪的围裙,脸上,身上,头上仿佛是永远洗不干净的油污。尤其是冬天,老人的手都会被冻裂出一道道令人触目惊心的口子,但他的修鞋绝活还真是没的说,经他手里过的鞋子,褶皱不见了,鞋上的污渍也不见了,整个看上去就像新的一样,但老人的价格却从来没有涨过。有人问他:“你为什么要干这种吃力不讨好的累活?”老人总会回过头来,温柔的看着这间已陪他几十年甚至将伴他走过余生的小铺子,说:“我继承了我父亲的事业,我对衣服更感兴趣,但想到父亲临终前那希翼的眼神,我还是答应了,既然答应了就要把我该做的事做到最好。”现实中有许多人就像王师傅一样,在不熟悉的领域中奋斗拼搏着,他们对自己所做的事十窍通了九窍,一切都是从零开始的,经过他们的奋斗和努力,最终在黑暗中开辟一条光明之路。

没有人生来就是天才,没有人生来就什么都懂,不经历风雨,怎么能见彩虹。以上的例子也将给一些在苦苦寻业的大学生的启示:没你所学的专业,没关系:薪水给得太低,没关系一切从零开始,努力是成功的前提,毅力是成功的基矗“你用材质和学识取得今天的收获,又以明智和果断接受明天的挑战。朋友,我敬佩你的一往无前。”这是我从一部小说中看到的话,一切从零开始,你永远都会有新收获,若你是其中一人,我敬佩你!

高二,就是一个新的学期,在这之后一切都归为零,我要从零开始。

高一圆满结束,可我画的这个圆,似乎并不完美。

“在高一的最后的一个测试中,谁都想要完美,谁都想要学,你要记住,加油使劲的可不是你一个人,你要比他们更努力,更完美。”

带着这样的心情,我走进了考场,“唧唧喳喳的闹成一片,”我厌恶地看着他们说,“还真是烦人。”等监考老师来了,教室突然之间变得安静起来,等试卷发下去了之后,“沙沙”的写字声响了起来,我自信满满的答题。

一小时,两小时就这样渐渐流去,永不复回。生命亦是如此。

前几次考试,为我拉开了一个好头,可第二天,我就一落千丈,心情好糟,完全安不下心,脑子一片空白,好比机器死机,屏幕一片空白,我想,这次砸了。

果真,我的直觉是对的,可我多么希望我的直觉是错了的,我想痛痛快快的哭一场,哭成一个泪人,可颗颗泪珠就像被封锁似的,打不开,却憋得难受。

下课,孟天玥借刘兆娜电话,她要赶紧告诉她妈妈这个好消息,看着她跟她妈妈通电话的笑容,我心里起了一番羡慕之情,好想拿第一。再看看他们得奖的人一个个含蓄的笑,都是发自内心的,我觉得我就是当陪衬的,我的存在没有太大的意义,我就像草坪中的一颗不起眼的小草一样,若有若无,可有可无,默默无闻,一声不吭,或许说是累赘。

整理好心情,一切从零开始,从零开始一点一滴的学习。0可以代表什么都没有,也可以代表从头开始,冲刺!

一阵阵清风吹过,面前掉落的碎头发来回晃荡,我眯着眼,抬起头来,望着太阳一步步下降,今天名落孙山,明天,又会东山再起。

采购员试用期工作总结

采购转正工作总结

采购员试用期转正工作总结

如何系统游有效学习java基础

软件技术实习报告

工厂采购试用期个人转正工作总结

innodb共享表空间vs独立表空间

计算机管理专业个人总结

软件业职位总结1 销售类

python链接Oracle数据库的方法

从零开始学Oracle―约束
《从零开始学Oracle―约束.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【从零开始学Oracle―约束(共10篇)】相关文章:

电力技术年终总结2023-12-30

SQL Server触发器及触发器中的事务学习2022-12-01

采购员转正的考核总结-试用期工作总结2022-06-28

oracle数据库索引失效2023-04-28

甲骨文高考作文2023-01-15

软件公司实习报告2023-11-11

企业采购员试用期总结2022-11-11

优化其索引的小技巧数据库教程2022-12-31

电力员工试岗人员个人总结2022-06-15

4月软件公司实习报告总结2022-04-30

点击下载本文文档