MySQL:外键及外键的使用

外键及外键的使用

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。

由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

表间关系有一对一,一对多和多对多。

首先我们举个简单的栗子

学生表,老师表,班级表
一个学生属于一个班级,一个班里有多个学生。一个学生可以被多个老师授课,一个老师也可以教多个学生,因此是多对多的关系。

建表如下:

CREATE TABLE teachers (
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(20) NOT NULL
);

CREATE TABLE classes (
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(20) NOT NULL
);

CREATE TABLE students (
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(20) NOT NULL,
	class_id INT NOT NULL,
	FOREIGN KEY (class_id) REFERENCES classes(id)
);

插入数据:

INSERT INTO classes (name) VALUES ('1班'), (2班');
INSERT INTO students (name, class_id) VALUES
('小A', 2),
('小B', 1);

DELETE FROM classes WHERE name = '1班'; //会失败,因为有外键的约束

DELETE FROM students WHERE name = '小B';//先删除小B同学
DELETE FROM classes WHERE name = '1班'; //此时删除1班会成功,因为没有外键的约束了

小练习

在这里插入图片描述
根据上图建立商品表
商品表

CREATE TABLE goods (
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '商品编号',
	name VARCHAR(30) NOT NULL COMMENT '商品名称',
	price INT NOT NULL COMMENT '单价,单位是分',
	category VARCHAR(20) NOT NULL DEFAULT '' COMMENT '商品类别',
	provider VARCHAR(50) NOT NULL DEFAULT '' COMMENT '供应商'
) COMMENT '商品信息';

客户表

CREATE TABLE customers (
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '客户编号',
	name VARCHAR(20) NOT NULL COMMENT '姓名',
	address VARCHAR(100) COMMENT '地址',
	email VARCHAR(100) COMMENT '邮箱',
	gender TINYINT NOT NULL COMMENT '性别:0 保密 1 女 2 男',
	idcard CHAR(18) NOT NULL COMMENT '身份证号码,实名制'
) COMMENT '客户信息';

订单表

CREATE TABLE purchases (
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '订单号',
	customer_id INT UNSIGNED NOT NULL COMMENT '客户编号',
	goods_id INT UNSIGNED NOT NULL COMMENT '商品编号',
	num INT NOT NULL DEFAULT 0 COMMENT '购买数量',
	FOREIGN KEY (customer_id) REFERENCES customers(id),//设置外键
	FOREIGN KEY (goods_id) REFERENCES goods(id)//设置外键
) COMMENT '订单信息';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章