数据库外键
程序员文章站
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
);
上一篇: Linux下编译运行C文件
下一篇: Linux下编译并运行C程序