1.外键
1.1:什么是外键
为了了解外键,我们先创两张表
mysql> USE itcast;
Database changed
创建完成第一张表
mysql> CREATE TABLE class(id INT(11) PRIMARY KEY,name VARCHAR(20))ENGINE=INNODB;
Query OK, 0 rows affected
给第一张表添加数据
mysql> INSERT INTO class(id,name) VALUES(1913,"上午班"),(1923,"下午班");
Query OK, 2 rows affected
Records: 2 Duplicates: 0 Warnings: 0
创建第二张表
mysql> CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20),class_id INT(11))ENGINE=INNODB;
Query OK, 0 rows affected
给第二张表添加数据
mysql> INSERT INTO student(id,name,class_id) VALUES (191301,"张三",1913),(192301,"李四",1923),(191302,"王二",1913);
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0
1.2:为表添加外键约束
为表添加外键格式如下:
需要注意的地方如下几点:
MYSQL可以在建立外键时添加ON DELETE 或ON UPDATE 子句来告诉数据库,怎么避免垃圾数据的产生,具体格式如下:
语句中的各参数的具体说明如下:
1.3:删除外键约束
格式如下:
2:操作关联表
2.1:关联关系
MYSQL中数据表的关联关系有三种,具体如下:
1:多对一
是最常见的一种关系,如,员工与部门之间的关系,一个部门可以有多个员工,而一个员工不能属于多个部门,也就是说部门表中的一行在员工表中可以有许多匹配行,但员工表中的一行在部门表中只能有一个匹配行。
2:多对多
3:一对一
3:添加数据
最常见的关联关系为多对一,接下来,为表class和student添加外键约束来建立两个表的关联关系。具体语句如下:
mysql> alter table student add constraint FK_ID foreign key(class_id) REFERENCES class(id);
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0
3.1查看外键约束是否成功添加,查询结果如下:
mysql> SHOW CREATE TABLE student;
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
`class_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_ID` (`class_id`),
CONSTRAINT `FK_ID` FOREIGN KEY (`class_id`) REFERENCES `class` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
我们事先添加过数据了,使用可以不用添加数据,如果要添加数据的话,也可以选择添加几个数据
3.2.1查询1913班有哪些学生,首先要查询1923班id,根据id在student表中查询该班级有哪些学生,具体步骤如下:
mysql> SELECT id FROM class WHERE id=1913;
+------+
| id |
+------+
| 1913 |
+------+
1 row in set
3.2.2:在student表中,查询class_id=1913的学生,即为1913班的学生,具体语句如下:
mysql> SELECT name FROM student WHERE class_id=1913;
+------+
| name |
+------+
| 张三 |
| 王二 |
+------+
2 rows in set
3.3:删除数据
由于class表和student表之间具有关联关系,参照列被参照的值是不能被删除的,所以,在删除1913班的时候,一定要删除该班级的所有学生,然后再删除班级,具体步骤如下:
交叉语句格式如下:
接下来通过具体的案例演示如何实现交叉连接,首先创建两个表,department和emlpoyee,具体语句如下:
内连接语法格式
原文:https://www.cnblogs.com/wom1999/p/11966152.html