day 2.md
1. ER图概述
-ER图 ---> ENtity Relationship Diagram
实体:矩形框 ---> 表
属性:椭圆框 ---> 列(字段、属性、特征)
关系: 菱形框
重数: 一对一(1:1)、一对多(1:n)、多对多(n:n)
- EER图 ---> EXtended ER图
正向工程: 先设计EER图,然后根据EER图生成数据库和表
反向工程: 用设计好的数据课的表生成EER图
2. 使用Workbench绘制EER图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-feqrp7Pm-1647767777125)(C:\Users\HP\Desktop\EER图设置.jpg)]
3. 数据库的正向工程和反向工程
3.1 正向工程
—> database —> Forward Engineer
- skip creation of FOREIGN 不需要生成外键约束
外键约束会影响数据的传输效率 很多互联网公司要求 可以有多对多的关系 但是不要外键约束
3.2 反向工程
—> database —> reverse Engineer
把代码变成工程
-- 如果存在名为school的数据库就删除它
drop database if exists `school`;
-- 创建名为school的数据库并设置默认的字符集和排序方式
create database `school` default charset utf8mb4;
-- 切换到schooL数据库上下文环境
use `school`;
-- 创建学院表
create table `tb_college`
(
`col_id` int unsigned auto_increment comment'编号',
`col_name` varchar( 50) not null comment '名称',
`col_intro` varchar( 5080) default '' comment'介绍',
primary key (`col_id`)
) engine=innodb comment'学院表';
-- 创建学生表
create table `tb_student`(
`stu_id` int unsigned not null comment '学号',
`stu_name` Varchar(20) not null comment'姓名',
`stu_sex` boolean default 1 comment '性别',
`stu_birth` date not null comment'出生日期',
`stu_add` varchar(255) default '' comment'籍贯',
`col_id` int unsigned not null comment'所属学院',
primary key (`stu_id`),
foreign key (`col_id`) references `tb_college` (`col_id`)
)engine=innodb comment'学生表';
-- 创建教师表
create table `tb_teacher`
(
`tea_id` int unsigned not null comment '工号',
`tea_name` varchar( 20) not null comment '姓名',
`tea_title` varchar(10) default '助教'comment'职称',
`col_id` int unsigned not null comment '所属学院',
primary key (`tea_id`),
foreign key (`col_id`) references `tb_college`(`col_id`)
) engine=innodb comment '老师表';
-- 创建课程表
create table `tb_course`
(
`cou_id` int unsigned not null comment '编号',
`cou_name` varchar(50) not null comment '名称',
`cou_credit` int unsigned not null comment'学分',
`tea_id` int unsigned not null comment'授课老师',
primary key (`cou_id`),
foreign key (`tea_id`) references `tb_teacher` (`tea_id`)
)engine=innodb comment '课程表';
-- 创建选课记录表
create table `tb_record`
(
`rec_id` bigint unsigned auto_increment comment '选课记录号',
`sid` int unsigned not null comment'学号',
`cid` int unsigned not null comment '课程编号',
`sel_date` date not null comment'选课日期',
`score` decimal(4,1) comment '考试成绩',
primary key (`rec_id`),
foreign key (`sid`) references `tb_student` (`stu_id`),
foreign key (`cid`) references `tb_course` (`cou_id`),
unique (`sid`,`cid`)
) engine=innodb comment'选课记录表';
4. 插入数据
- insert into 表 values();
use school;
-- 如果不指定给哪些列赋值,就得给按照表的顺序全部赋值
insert into tb_college values(default,'数学学院','学习很难的该死的数学');
-- 三元组 编号默认,学院名称,简介
-- 给指定的列赋值 (没有赋值的列要么允许为空,要么有默认值)
insert into tb_college(col_name,col_intro) values('金研院','中泰金融');
-- 不给学院的编号 编号为默认值
-- Error Code: 1136. Column count doesn't match value count at row 1
-- 批量插入——同时加入三条数据
insert into tb_college(col_name,col_intro) values
('经管学院','fagdgfeee'),
('化学学院','ffadfa'),
('物理学院','sddfad');
-- 批量添加学生
insert into tb_student(stu_id,stu_name,stu_sex,col_id) values
(1,'caozi','0',1),
(2,'caoziwen','0',2),
(3,'caozi1','0',3),
(4,'caoen','0',4),
(5,'caoyuanming','1',1);
-- Error Code: 1062. Duplicate entry '1' for key 'tb_student.PRIMARY‘
-- 重复的条目 学号要求不相同
insert into tb_student(stu_id,stu_name,stu_sex,col_id) values
(7,'caozi','0',15);
-- Error Code: 1064. 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 2
5. 删除数据
delete from 表 where 条件
-
insert / delete / updata
-
删除一定要带条件!!
-
无条件删除 NO!整张表都删除了 delete from tb_college;
use school;
delete from tb_college where col_id = 4;
-- in 成员运算 删掉 5 6 行
delete from tb_college where col_id=1;
--不让删除 这个学院有学生 违反了外键约束
-- Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`school`.`tb_student`, CONSTRAINT `tb_student_ibfk_1` FOREIGN KEY (`col_id`) REFERENCES `tb_college` (`col_id`))
-- 删除表 truncate 删除的数据 不能恢复
truncate table tb_college;
6. 更新数据
- update 表 set 更新的内容 where 条件;
- 在SQL语句中 等号= 就是相等判断 如果要赋值的话 需要先写上set
- set 后面的等号 赋值
- 没有写条件的话 就是 全表更新
- between 1 and 5 在1和5之间
use school;
update tb_student set stu_add='湖南湘潭'where stu_id in (1,3);
update tb_student set stu_birth='2000-1-9',stu_add='湖南湘潭'
where stu_id between 6 and 7;
nd 5 在1和5之间
use school;
update tb_student set stu_add='湖南湘潭'where stu_id in (1,3);
update tb_student set stu_birth='2000-1-9',stu_add='湖南湘潭'
where stu_id between 6 and 7;