Primary key:(pk)主键
直接代表字段为not null,不许重复,且一个表只有一个主键。
primary key 相当于在各个组成主键的字段上加上not null约束,再以所有主键字段组合在一起加unique约束。
并且建立主键将自动添加一个Bi_tree索引。(因为i主键分离度非常高)
插入信息必须符合主键约束。
主键的创建:
1.create table table_name(
字段名 类型 primary key
);
2.create table table_name(
字段名 类型
primary key(字段名) --可以明确主键的名字
);
3.(推荐:可以设定主键名字[前两种不知道主键的名字],主键也是一种constraint,并且可以开启关闭)
create table 表名(
......
,constraint 主键(PK)名 primary key(字段名)
);
create table sm_student
(
name varchar2(10) primary key,
depart varchar2(10),
birthday DATE,
dome varchar2(10)
);
国外一般用'姓名+出生日期'作为主键
添加主键:
alter table table_name
add primary key(字段名);
create table banji(
bno char(5) primary key,
bname varchar2(40)
);
drop table banji;
create table banji(
bno char(5),
bname varchar2(40),
constraint b_pk primary key(bno)--推荐使用:可以明确主键名称
);
insert into banji values('97001','97001Bn');
insert into banji values('97002','97002Bn');
insert into banji values('97003','97003Bn');
insert into banji values('97001','97002Bn');--重复插入会报错
外键
添加外键:
创建外键:
create table table_name
(字段列表,
constraint 外键约束名
foreign key(子表组成外键的字段)
references 父表名称(父表组成外键的字段)
);
alter table table_name
add constraint 外键约束名
foreing key(子表组成外键的字段)
references 父表名称(父表组成外键的字段);
练:
drop table student;
create table student(
sno char(5),
sname varchar(20),
sage number(2),
sclass char(5),
constraint sclass_fk foreign key(sclass) --此表中的sclass 参考到父表(班级表)中的bno
references banji(bno)
);
insert into student values('10001','Tom',21,'97001');
insert into student values('10002','Jerry',24,'97002');
insert into student values('10003','Lili',23,'97003');
insert into student values('10004','Tim',25,'97004');--出错
有外键的字段修改:要先参照父表(如在子表插入数据时,父表中没有时,插不进去)。
删表必须先删父表,再删子表。对上例:先删除班级表会出错。
delete from banji where bno='97001';
drop table banji;