主键&表之间的关系(外键)

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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值