.
1.主键: PK (Primary Key) = 非空 + 唯一
emp表的empno列是PK. 非空且不能和现有的职员编码重复.
dept表的deptno列是PK.
联合主键: 多个列共同标识一条记录.这些列的组合是唯一的.联合主键的例子:
商品表
101(PK)   iphone4 100
102           lenovo   150
103           x201       180用户表
1(PK)      张无忌   北京
2             赵敏       天津订单表
PK
1001(订单id)  1(用户id)  500
1002                2               600订单详情表(订单id和商品id作为联合主键)
1001(订单id)   101(商品id) 2
1001                 102              2
1002                 101              3
1002                 102              2另一个联合主键的例子(first_name和last_name是联合主键)
first_name  last_name major        score
peter            smith         computer  85
bono            smith         computer  90 
peter            blake         history       952.外键: FK (Foreign Key)
emp  n..1  dept 
外键表达的是一对多的关系.
当定义emp表的所在部门时,一定参照dept表的主键列.
update emp set deptno = 99 
where empno = 7788;
编码是99的部门不存在,则报错:parent key not found.(在dept表中没有99部门)
student ----- major
              n..1
create table major(
id number primary key,
name varchar2(20));
insert into major values(101, 'computer');
insert into major values(102, 'music');create table student(
id number primary key,
name varchar2(20),
majorid number,
constraint stu_majorid_fk foreign key (majorid) references major(id)
);
insert into student values(1, 'scott', 101);
insert into student values(2, 'peter', 102);
insert into student values(3, 'bono', 101);第一种错误:
insert into student values(4, 'chris', 105);
105号专业不存在,则报错:Parent Key Not Found.
第二种错误:
delete from major where id = 101;
如果试图删除主表(父表)中的记录,这条记录被参照,则报错:Child Record Found.以上两种错误操作都是由外键约束条件保证的.3.非空: NN (Not Null)
不允许插入空值4.唯一: UK (Unique)
不允许重复5.检查: CK (Check)
必须符合检查约束预设的条件.五.建表
1.create table student_t
(id number primary key,
name varchar2(30) not null,
email char(40) unique,
registtime date default sysdate);2.新增记录
insert into student_t(id, name, email)
values(1, 'scott', '[email protected]');
insert into student_t(id, name, email, registtime)
values(2, 'peter', '[email protected]',
to_date('2010-09-01', 'yyyy-mm-dd'));--如果增加的是全部字段,列名可以省略
insert into student_t 
values(3, 'chris', '[email protected]',
to_date('2010-01-01', 'yyyy-mm-dd'));--如果某个字段是空值,可以使用两种方式insert
insert into student_t(id, name, registtime)
values(4, 'bono', sysdate);
insert into student_t(id, name, email, registtime)
values(5, 'dawson', null, sysdate);3.建表同时创建主键约束.
--3.1创建列级约束,给主键命名
create table student_t1(
id number(6) constraint stud_t1_id_pk primary key,
name varchar2(20));
--3.2.创建列级约束,由系统命名
create table student_t3(
id number(6) primary key,
name varchar2(20));
--3.3.创建表级约束, 给主键命名
create table student_t2(
id number(6),
name varchar2(20),
constraint stut2_id_pk primary key(id));
--3.4.创建表以后,追加主键约束
create table student_t4(
id number(6),
name varchar2(20));
alter table student_t4
add constraint stud_t4_id_pk primary key(id);4.非空约束Not Null
只能定义在列级.可以命名或不命名.
create table student_t5(
id number,
name varchar2(20) not null,
email char(40) constraint stud_t5_email_nn not null);
在数据字典中查看刚刚建立的约束:
select constraint_name, constraint_type
from user_constraints
where table_name = 'STUDENT_T5'