目标与配置

》目标

完成一个老师,班级,学生的关系表数据操作

》操作数据库:

python999

创建数据库
mysql> create database python999 character set utf8;
Query OK, 1 row affected, 1 warning (0.01 sec)
班级表

》关系分析

班级与学生关系,一个班级有多个学生,一个学生只有一个班级,一对多关系

班级与老师的关系,一个班级有多个老师,一个老师带多个班级,多对多关系

可先创建班级表

》建表代码

create table classes(
id int unsigned auto_increment primary key,
name varchar(25) not null
);
学生表,外键关联班级表

》关系分析

学生与班级的关系,一个学生对应一个班级,一个班级会对应多个学生,因此,班级与学生的关系是一对多的关系

可考虑在学生表建立一个外键字段

先建班级表,再建学生表,学生表来一个外键关联班级表

》建表代码

create table students(
	id int unsigned primary key auto_increment,
	name varchar(25) not null,
	cls_id int unsigned,
	foreign key (cls_id) references classes(id)
);

》注意事项

外键类型要一致

同时有无符号也需要一致

下面的代码,在建表的时候,因为外键没有定义无符号

而主键有符号

所以创建失败

mysql> create table students(
-> id int unsigned primary key auto_increment,
-> name varchar(25) not null,
-> cls_id int,
-> foreign key (cls_id) references classes(id)
-> );
ERROR 3780 (HY000): Referencing column ‘cls_id’ and referenced column ‘id’ in foreign key constraint ‘students_ibfk_1’ are incompatible.

老师表

老师与班级关系,同班级与老师关系

班级与老师的关系,一个班级有多个老师,一个老师带多个班级,多对多关系

》创建老师表

mysql> create table teachers(
    -> id int unsigned auto_increment primary key,
    -> name varchar(25) not null,
    -> );
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 4


mysql> create table teachers(
    -> id int unsigned auto_increment primary key,
    -> name varchar(25) not null
    -> );
Query OK, 0 rows affected (0.07 sec)

mysql>

注,在第一次打老师表的时候,只是因为多了一个逗号,都会导致命令执行失败

第二次是成功的代码,关注第二次的建表语句就好

班级与老师多对多的关系表

班级与老师是多对多的关系

无法直接通过班级表与老师表建立

需要借助第三张表来完成

第三张表表结构

mysql-练习的数据准备_外键