发布网友 发布时间:2022-04-08 07:03
共2个回答
懂视网 时间:2022-04-08 11:24
外键取值规则:空值或参照的主键值。
(1)插入非空值时,如果主键表中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。
简而言之,SQL的主键和外键就是起约束作用。
二、创建语句
创建表:
create table emp_dept( empno number(4) primary key not null,--第一种方式创建主键 ename varchar2(10), deptno number(2), deptname varchar2(14) ); comment on column emp_dept.empno is ‘用户编号‘; comment on column emp_dept.ename is ‘用户名‘;
创建主键:
方式一:如创建表时,在主键字段定义时声明即可。
方式二:在创建表的最下面声明主键
create table emp_dept( empno number(4) not null, --第一种方式创建主键 ename varchar2(10), deptno number(2), deptname varchar2(14), constraint pk_emp_dept primary key ("empno ") );
方式三:使用alert语句
alter table 表名 add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,‘PK_字段名‘就为约束名 primary key (字段名) --字段名同上
创建外键:
方式一:
create table sc( sno char(5) constraint fk_student references student(sno),--写在属性定义里 cno char(5), foreign key(cno) references course(cno), grade number );
方式二:
create table sc( sno char(5), cno char(5), foreign key(cno) references course(cno), grade number,
constraint fk_student foreign key(sno) references student(sno)
);
方式三:
alter table sc add constraint fk_student foreign key(sno) references student(sno);
删除外键:
alter table drop constraint fk_student;
三、举例
创建student、course、stu_cou表,一个是学生表,一个是课程表,一个是学生课程关联表:
student:
create table student( sno number(6) primary key not null, sname varchar2(20) );
course:
create table course( cno number(6) not null, cname varchar2(30), constraint pk_course primary key (cno) );
stu_cou
create table stu_cou( sno number(6) not null , cno number(6) not null constraint fk_course references course(cno) on delete cascade,--级联查询 create_time Date default sysdate, foreign key(sno) references student(sno) on delete cascade--级联查询 );
每个表插入一条数据
insert into student(sno,sname) values(1,‘bright‘); insert into course(cno,cname) values(1,‘java‘); insert into stu_cou(sno,cno) values(1,1);
这些数据都是合法的,首先主键满足唯一约束条件,外键满足约束条件,此时,插入一条不合法数据
insert into stu_cou(sno,cno) values(1,2);
删除一条数据
delete from course;
会看到stu_cou表中数据都被删除了
oracle——DDL
标签:
热心网友 时间:2022-04-08 08:32
ddl操作会记录日志,去alert日志中找。