1、建表时定义约束,既可以在列级定义,也可以在表级定义。对于NOT NULL约束,只能在列级定义,不能再表级定义。
(1)列级定义
语法:
column [CONSTRAINT constraint_name] constraint_type,
02:01:01 SQL> create table t1 (
02:01:19 2 deptno number(2) constraint pk_deptid primary key,
02:01:25 3 name varchar2(20),
02:01:30 4 loc varchar2(20));
Table created.
02:12:07 SQL> desc t1;
Name Null? Type
--------- -------- -----------------
DEPTNO NOT NULL NUMBER(2)
NAME VARCHAR2(20)
LOC VARCHAR2(20)
02:12:15 SQL> insert into t1 values (10,'Cisco','BeiJing');
1 row created.
02:12:59 SQL> insert into t1 values (10,'Cisco','BeiJing');
insert into t1 values (10,'Cisco','BeiJing')
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.PK_DEPTID) violated
(2)表级定义
语法:
column, … ,
[CONSTRAINT constraint_name] constraint_type(column, … ),
create table t2(
2 empno number(4) ,name varchar2(15),job varchar2(10),
3 manager_id number(4),hire_date date,sal number(7,2),
4 comm number(7,2),deptno number(2),
5 constraint pk_emp_id primary key(empno)
6 using index tablespace users01,
7 constraint fk_dept_id foreign key (deptno)
8 references t1(deptno));
Table created.
03:43:32 SQL> select * from t1;
DEPTNO NAME LOC
---------- -------------------- --------------------
10 Cisco BeiJing
03:43:46 SQL> insert into t2 values(7788,'tom','sales','7936',sysdate,3000,0,20);
insert into t2 values(7788,'tom','sales','7936',sysdate,3000,0,20)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.FK_DEPT_ID) violated - parent key not found
在t1的deptno没有20的,所以插入20的记录出错,参考性约束。
03:44:59 SQL> insert into t2 values(7788,'tom','sales','7936',sysdate,3000,0,10);
1 row created.
03:45:04 SQL> select * from t2;
EMPNO NAME JOB MANAGER_ID HIRE_DATE SAL COMM DEPTNO
---------- --------------- ---------- ---------- ------------------- ---------- ---------- ----------
7788 tom sales 7936 2011-02-25 03:45:04 3000 0 10
2、建表后增加约束
(1) Not Null
Not null 约束只能用modify去修改。
04:19:22 SQL> alter table test modify ename not null;
Table altered.
(2)unique
04:27:41 SQL> alter table test
04:30:25 2 add constraint uni_ename unique(ename);
Table altered.
04:32:06 SQL> alter table test
04:32:07 2 add constraint uni_ename unique(ename)
04:32:10 3 using index (create index ind_name on test(ename));
add constraint uni_ename unique(ename)
*
ERROR at line 2:
ORA-02261: such unique or primary key already exists in the table
04:39:10 SQL> alter table t1
04:39:17 2 add constraint u_name unique(name)
04:39:20 3 using index (create index ind_name on t1(name));
Table altered.
(3)check
04:42:10 SQL> alter table t1
04:42:13 2 add constraint chk_loc check (loc in ('BeiJing','ShangHai'));
Table altered.
04:42:19 SQL> insert into t1 values(40,'Microsoft' ,'TianJing');
insert into t1 values(40,'Microsoft' ,'TianJing')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CHK_LOC) violated
04:43:03 SQL> insert into t1 values(40,'Microsoft' ,'ShangHai');
1 row created.
04:43:18 SQL> select * from t1;
DEPTNO NAME LOC
---------- -------------------- --------------------
10 Cisco BeiJing
20 C%ommd ShangHai
查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/