欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库外键

程序员文章站 2022-06-04 13:02:09
...

主键:能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但是可以有多个索引。主键常常与外键构成完整性约束,防止出现数据的不一致,数据库管理系统对于主键自动生成唯一索引,所以主键是一个特殊的索引。
外键:用于建立和加强两个表数据之间的连接的一列或者多列。外键主要是用来维护两个表之间的数据的一致性。

索引:用来快速寻找那些具有特定值的记录,主要是为了查找访问的速度,按照一定的规则创建的,一般是排序作用。
总结:
主键一定是唯一索引,唯一性索引并不一定是主键
一个表中可以有多个唯一索引
主键列不允许空值,而唯一索引列允许空值。

外键:一对多模型:
比如说一个部门对应着多个员工,而不存在多个部门对应一个员工,因此这是一对多的模型:
比如我们建立一个表:部门表

create table dep(id int primary key auto_increment,name char(32),
	dep_desc char(32)
);
create table  staff(id int primary key auto_increment, name char(32),age int,dep_id int,foreign key(dep_id) references dep(id) on update cascade on delete cascade );

修改一个主表从表中的dep_id也会随着修改,这就相当于建立了一个联系。

insert into dep values(1,"技术部","专研技术"),(2,"研发部","研发代码");
 
insert into staff values(2,"wy",20,1);
 insert into staff values(3,"wy",20,2);
 delete from dep where id=2;
 会将从表staff中的dep_id=2的元素删除

外键:多对多
案例呢就是一个作者可以写多本书,一本书也可以被多个作者共同著作
从作者的角度:一个作者对应着多本书
从书的角度:就是一本书对应着多个作者
对于二者建立外键连接存在着一个互为外键的问题,怎么解决?我们使用第三张表来构建这两张表的联系,第三张表关联书与作者的表:
书:id name
作者 id,name
第三个表: book_id author_id
建立一个输的表

create table book(id int primary key auto_increment,
    name char(32)
    );

建立一个作者的表

create table author(id int primary key auto_increment,
    name char(32)
);

插入书名

insert into book(name) values("金瓶梅"),("兰桂坊"),("围城");
插入作者名
insert into author(name) values("egon"),("kevin"),("jason");

创建关联表名:

create table booktwoauthor(id int primary key auto_increment,
book_id int,foreign key(book_id) references book(id)
on update cascade
on delete cascade,
author_id int,foreign key(author_id) references author(id)
on update cascade
on delete cascade
);

一对一:

客户 :id 姓名 qq phone
学生:id 班级名,用户id

create table customer(id int primary key auto_increment,
    name char(32),qq char(20),phone char(11)
);

create table student(id int primary key auto_increment,
    class_name char(32),custom_id int unique,
    foreign key(custom_id) references customer(id)
    on update cascade
    on delete cascade
    );