》目标
完成一个老师,班级,学生的关系表数据操作
》操作数据库:
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>
注,在第一次打老师表的时候,只是因为多了一个逗号,都会导致命令执行失败
第二次是成功的代码,关注第二次的建表语句就好
班级与老师多对多的关系表班级与老师是多对多的关系
无法直接通过班级表与老师表建立
需要借助第三张表来完成
第三张表表结构