主键:
1.主键约束: 一个表只能有一个主键约束。主键可以是单个字段,也可以是多个字段。无论是哪种情况,其所有字段都是NOT NULL。
2.Unique约束:一个表可以有多个Unique约束,Unique的字段可以为NULL。
3.主键与Unique:不同点在于一个表只能有一个主键约束,但是可以有多个Unique约束;主键所有字段都是not null,unique可以是
null;相同点在于都能保证唯一性。
4.主键、Unique与索引:主键约束与Unique约束默认会成为索引。当主键和Unique有多个字段时,有索引前缀性问题,即where语
句中的条件必须有主键或者unique的第一个字段,否则不会使用索引。
5. 外键与主键、Unique:外键必须为另外一张表(父表)的主键或者唯一索引。如果要添加记录,而父表中没有则报错。反之,如
果要删除父表中的记录,而子表中有记录,也会报错。但是如果在创建外键约束时,如果使用on delete cascade,则删除父表中数据时
,不报错而直接把子表关联的数据删除。
如果要删除父表,则需要加上cascade constraints,此时子表的foreign key被去除,表中记录保持不变。
外键:
外键是该表是另一个表之间联接的
oracle主键的设置方法有2种:
一种是设置自增长主键,另一种是生成唯一序列;
1.自增长主键
SQL> create table Prim_key_Increase_Test(
2 id number(10) primary key,
3 name varchar2(30)
4 );
表已创建。
SQL> create sequence Prim_key_Incre_Sequence
2 minvalue 1
3 nomaxvalue
4 start with 1
5 increase by 1
6 nocycle
7 nocache;
increase by 1
*
第 5 行出现错误:
ORA-00933: SQL 命令未正确结束
SQL> 5
5* increase by 1
SQL> c /increase/increment/
5* increment by 1
SQL> r
1 create sequence Prim_key_Incre_Sequence
2 minvalue 1
3 nomaxvalue
4 start with 1
5 increment by 1
6 nocycle
7* nocache
序列已创建。
SQL> create trigger Prim_key_trigger before
2 insert on Prim_key_Increase_Test for each row
3 begin
4 select Prim_key_Incre_Sequence.nextval into:New.id from dual;
5 end;
6 /
触发器已创建
SQL> commit;
提交完成。
SQL> insert into Prim_key_Increase_Test(id) values('181');
已创建 1 行。
SQL> select * from Prim_key_Increase_Test;
ID NAME
---------- ------------------------------
1
SQL> insert into Prim_key_Increase_Test(id) values('181');
已创建 1 行。
SQL> insert into Prim_key_Increase_Test(id) values('181');
已创建 1 行。
SQL> select * from Prim_key_Increase_Test;
ID NAME
---------- ------------------------------
1
2
3
新闻热点
疑难解答
图片精选