.
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'
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'
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货