MySQL 数据库创建 表间 关系 设置外键

将表中已有字段设置 外键
似乎不能设置为主键即使定义时没有定义主键也会报错 如
Multiple primary key defined

1。添加新字段
alter table 表名 add 字段名 字段描述;

alter table student add phone varchar(20);

2。设置外键
alter table 表名 add constraint 键名 foreign key(外键名) references 主表名(主表主键名)

alter table grade add constraint g_id foreign key(g_id) references school(id)

8.一对多关系
1.设计表
1.班级表
create table classes(classid int primary key auto_increment,classname varchar(20));

2.学生表
create table student2(studentid int primary key auto_increment,studentname varchar(20) not null,classid int,foreign key(classid) references classes(classid))
外键格式: foreign key(外键字段名) references 表名(关联字段名)

   classid班级id是外键,需要关联classes班级表的classid主健,  

2.插入数据
1.班级表
insert into classes values(0,“py01”),(0,“py02”),(0,“py03”),(0,“java01”),(0,“h501”),(0,“ui01”),(0,“java02”),(0,“h502”),(0,“ui02”);
2.学生表
insert into student2 values(0,“张三”,4);
insert into student2 values(0,“李四”,1);
insert into student2 values(0,“王五”,1);
insert into student2 values(0,“赵六”,2);
insert into student2 values(0,“田七”,1);

注意:如果关联的外键,而外键的值在关联的表中不存在,则无法成功插入
error: insert into student2 values(0,“胖八”,11);

3.多表查询数据
1.需求: 查看所有的学生姓名及其所在的班级 ?
例:
select student2.studentname,classes.classname from student2,classes where student2.classid = classes.classid;
注: 1.表名.字段名 可以指定到对应表中的某个字段,在多表联合查询的时候使用
2.在多表联合查询的时候,from后面可以跟多个表
2.需求2: 展示py01班所有的学生?
select student2.studentname,classes.classname from student2,classes where student2.classid = classes.classid and classes.classid=1;
3.需求3: 展示所有学生的所有信息?
select student2.,classes. from student2,classes where student2.classid = classes.classid;
4.连接关系查询
1.内连接 inner join
1.查询所有学生及姓名 ?
select student2.studentname,classes.classname from student2 inner join classes on student2.classid = classes.classid;
2.左外连接 left join
select student2.studentname,classes.classname from classes left join student2 on student2.classid = classes.classid;
3.右外连接 right join

4.格式:  select .... from 表1 inner/left/right join 表2  on  条件;

9.多对多
1.设计表
1.学生表
create table student3(studentid int primary key auto_increment,studentname varchar(20) not null);
2.课程表
create table courses(coursesid int primary key auto_increment,coursesname varchar(20));
3. 学生 —课程 表即选修课表
create table elective(studentid int,coursesid int,primary key(studentid,coursesid),foreign key(studentid) references student3(studentid),foreign key(coursesid) references courses(coursesid));

选修课

2.插入数据
插入学生:
insert into student3 values(0,“张三”);
insert into student3 values(0,“李四”);
insert into student3 values(0,“王五”);
insert into student3 values(0,“赵六”);
insert into student3 values(0,“田七”);

插入课程:

insert into courses values(0,“python”);
insert into courses values(0,“java”);
insert into courses values(0,“h5”);
insert into courses values(0,“ui”);

插入选修课数据:
insert into elective values(1,1);

insert into elective values(1,2);
insert into elective values(1,4);
insert into elective values(3,1);
insert into elective values(3,4);

insert into elective values(1,1);
注意:如果关联了外键,而外键的值在关联的表中不存在,则无法成功插入,

3.查询数据
查询学生的选修课
select student3.*,courses.* from student3,courses,elective where student3.studentid = elective.studentid and courses.coursesid = elective.coursesid;

mysql数据库。
多表查询时
select … from 表1 inner/left/right join 表2 on 条件;
假设有班级表 学生表
inner join 内联。查询数据为两表重合部分。即学生表外键关联了班级表的部分。 而学生表外键为空部分 班级表未被关联部分 不做为查询库
left out join/left join 左外连接 即使表1 中没有外键关联 或者 被关联 也作为查询库。
right out join/right join 右外连接 表2 中的数据作为查询库。同左外连接。

  • 9
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值