日期:2014-05-16  浏览次数:20491 次

oracle学习笔记(四)
primary key约束:

主键约束的定义:

第一种定义形式:列级约束
create table test(c  number  primary key  );     列级约束

第二种定义形式:表级约束
create table test(c  number , primary key(c) )  ; 表级约束

create table test( c1  number  constraints   pkc1  primary key ); 
此约束有名字:  pkc1

create table test(c number , c2  number ,  primary key (c ,c1) )  ; 用表级约束可以实现联合主键

foregin  key   (fk)   外键约束:

(先定义父表,再定义子表)

carete   table     parent(c1 number  primary key );

create   table    child  (c  number primary key ,   c2 number  references parent(c1));

或表级约束定义:
create   table  child( c number primary key ,  c2  number  , foreign key(c2)  references  parent(c1));

如果两个字段都为唯一且非空,这时可以定义成UK+NOT NULL


(PK或UK)一对多(FK)
(PK+UK)一对一(FK)      或   (PK)一对一(PK)

多对对多关系,一般都通过一张中间表来分解成两个一对多的表

非空约束是唯一一个可以用desc看到的约束

check 约束


create table test(c1 number primary key);   设置主键
create table test(c1 number constraints test_c1 primary key);   定义约束名,默认约束名为SYS_      在列后面定义约束称为列级约束
create table test(c1 number primary key(c1));   所有列定义完后再定义约束称为表级约束(能定义联合主键)
cretae table test(c1 number,c2 number,priary key(c1,c2));    定义联合主键
create table test(c1 number primary key,c2 number unique);  unique 唯一约束
create table test(c1 number primary key,c2 number not null unique);   一个字段上可以加多个约束
create table test(c1 number check(c1>100));  约束c1的值大于100 ,列级约束
create table test(c1 number,check(c1>100));  表级约束

create table child(c1 number primary key);    先要定义父表
create table child(c1 number primary key, c2 number references parent(c1));   然后定义子表  references parent定义外键
create table child(c1 number primary key, c2 number references parent(c1) on delete cascade);  on delete cascade为级联删除,删除父表时子表也被删除
create table child(c1 number primary key, c2 number references parent(c1) on delete set null);   on delete set null删除后将外键置空
create table child (c1 number primary key, c2 number,foreignkey(c2) references parent(c1));


DML操作  

online transaction procession   OLTP 联机事务处理

1、insert操作,插入记录  
      
insert into 表名 values(值1,值2,......);
注意这种方法插入记录时,要对所有字段进行插入,没有非空约束时,又不想插入值时,要用空值替代,并且要按照字段的顺序插值(要清楚表结构),且要注意数据类型一致。

insert into 表名(字段名1,字段名2,.....) values(值1,值2,......);
这种方法可以对指定的字段进行插入,不想插值的就可以不写,前提是该字段没有非空约束。

例:insert into student value(1,'xxx','xxx');
    insert into student(id,name,address) value(1,'xxx','xxx');
   
注意:有空值的话:
      隐式插入
          INSERT INTO s_dept (id, name) VALUES (12, 'MIS');
          不往想为空的字段中插数据,系统默认为NULL
      显示插入
          INSERT INTO s_dept VALUES (13, 'Administration', NULL);
  
   select * from s_emp where 1=2;  这样选不出纪录,方便察看表结构
  
2、update修改操作

update table 表名 set  字段名1=数据1或表达式1, 字段名2=数据2或表达式2
[where ....=....];

例:update shenfenzhen set num=99 where sid=2; 



3、delete删除操作

delete from 表名 [where ...=...];

例:update shenfenzhen set num=99 where sid=2;

用delete 删除一张大