MySQL数据库基础(六):多表的创建、关系以及外键约束、主键约束与唯一约束

本文详细介绍数据库设计过程,包括创建数据库、表及维护多表间关系。通过实例讲解如何创建商品分类和商品表,设置外键约束,以及遵循的建表原则。深入探讨主键与唯一约束的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、多表的创建

1.1创建一个名为thing的数据库

1.1.1 创建thing数据库

create database thing;

在这里插入图片描述
1.1.2 登录数据库

use thing;

1.2创建一个商品分类的表category

1.2.1 商品分类:手机数码,鞋靴箱包,香烟酒水,酸奶饼干,零食

1.分类的ID
2.分类的名称
3.分类描述

1.2.2 在thing数据库中创建商品分类这个表

create table category(
	cid int primary key auto_increment,    
	cname varchar(10),
	cdesc varchar(31)   
);

1.2.3 在category这个表中插入一些数据

insert into category values(null,'手机数码','电子产品');
insert into category values(null,'鞋靴箱包','生活用品');
insert into category values(null,'香烟酒水','黄鹤楼,二锅头');
insert into category values(null,'酸奶饼干','娃哈哈,纯甄');
insert into category values(null,'零食','瓜子,花生,辣条');

1.3 创建一个所有商品的表product
1.3.1 所有商品

1.商品ID
2.商品名称
3.商品价格
4.生产日期
5.商品分类ID

1.3.2 在user数据中中创建商品这个表

商品和商品分类:从属关系

create table product(
	pid int primary key auto_increment,
	pname varchar(10),
	price double,
	pdate timestamp,
	cno int 
);

1.3.3 在product表中插入数据

insert into product values(null,'小米8',4999,null,1);
insert into product values(null,'锤子',66,null,1);
insert into product values(null,'阿迪',2000,null,2);
insert into product values(null,'老村长',88,null,3);
insert into product values(null,'劲酒',35,null,3);
insert into product values(null,'小熊饼干',3.5,null,4);
insert into product values(null,'娃哈哈',10,null,4);
insert into product values(null,'卫龙辣条',3,null,5);
insert into product values(null,'旺旺雪饼',2,null,5);

1.4 查看创建的表以及表中的数据
1.4.1 查看thing数据库中所有表

show tables;

在这里插入图片描述
1.4.2 查看表category中的数据

select * from category;

在这里插入图片描述
1.4.3 查看product表中的数据

select * from product;

在这里插入图片描述

2、多表之间关系的维护:外键约束

foreign key

2.1 练习:给product中的cno添加一个外键约束

alter table product add foreign key(cno) references category(cid);

2.2 练习:各种坑
2.2.1 插入cno为8的一条数据
此时,我们在去向product表中插入数据,如果插入的数据的cno在category表中找不到对应的cid,就无法插入数据

insert into product values(null,'oppo',2999,null,8);

在这里插入图片描述
2.2.2 从分类表中,删除分类信息为5 的信息
由于我们在表product中添加了分类IP为5的数据,所以我们无法删除

delete from category where cid=5;

在这里插入图片描述
如果我们一定要删除这条数据,那么就要先将product表中所有cno=5的数据全部删除之后,再去删除表category中cid=5的数据

3、建数据库与多表之间的建表原则

3.1 建数据库的原则

  • 一个项目或应用建一个数据库

3.2多表之间的建表原则

  • 一对多:商品和分类

    • 建表原则:在多的一方添加一个外键指向一的一方的主键
  • 多对多:老师和学生,学生和课程(学生表,课程表,中间表)

    • 建表原则:多建一张中间表,中间表至少要有两个外键,将多对多的关系拆成一对多,这两个外键分别指向原来的那张表
  • 一对一:公民和身份证

    • 建表原则:
      1.将一对一的情况,当作是一对多情况处理,在任意一张表中添加一个外键,并且这个外键要唯一,指向另一张表;
      2.直接将两个表合成一张表;
      3.将两张表的主键建立起连接,让两张表里界面主键相等。

4、主键约束与唯一约束

  • 主键约束:默认不能为空,唯一

    • 外键都是指向另外一张表的主键
    • 一张表只有一个
  • 唯一约束:列里面的内容必须是唯一的,不能出现重复的,可以为空(null)

    • 唯一约束不可以作为其他表的外键
    • 可以有多个唯一约束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值