主键外键

主键和外键是在我们创建数据库的时候保证数据的完整性。
当有很多表的时候,表之间都是有关联的 。
mysql数据库中的一条记录中有若干个字段,若其中某一个字段能唯一标识一条记录,该字段就可以成为一个主键
比如
学生表(学号,姓名,性别,班级)
其中每个学生的学号是唯一的,学号就是一个主键
课程表(课程编号,课程名,学分)
其中课程编号是唯一的,课程编号就是一个主键
成绩表(学号,课程号,成绩)
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的字段组是一个主键
[

](https://blog.csdn.net/fengzongfu/article/details/78820485)

1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份证号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键

名字 定义 作用 个数
主键 唯一标识一条记录,不能有重复的,不允许为空 用来保证数据的完整性 主键只有一个
外键 表的外键是另一表的主键,外键可以有重复的,可以是空值 用来和其他表进行联系用的 一个表可以有多个外键

创建学生表,并把id设置主键

  1. create table student(
  2. id int ,
  3. name varchar(255),
  4. sex varchar(255),
  5. age int,
  6. primary key(id) #设置id为主键,id不能重复,不能为空
  7. );

创建分数表,并把id设置为student表的外键

  1. create table score(
  2. id int ,
  3. cno varchar(255),
  4. score int);
  5. alter table 子表 add foreign key (子表的连接字段) references 父表(父表连接字段); #给表设置外键
  6. alter table score add foreign key (id) references student(id);

视图

image.png

创建视图

  1. create view 视图的名称 as select语句;
  2. create view 员工薪资 as select * from price where post="员工";
  3. #删除视图
  4. drop view 视图名;

image.png

新建一个20032班级学生分数表视图,里面有学生名字,科目名字,成绩

  1. CREATE VIEW 20032班级成绩表 AS SELECT
  2. sname,cname,degree FROM
  3. student
  4. JOIN score ON student.sno = score.sno
  5. JOIN course ON score.cno = course.cno
  6. WHERE
  7. class = 20032;

存储过程

存储过程就是特定的sql语句,只要不去其进行修改,编译一次之后就可以一直运行;

在表中添加1000条数据,像这种比较繁琐的工作就可以用存储过程实现,或者经常使用的特定的sql语句,也可以定义为存储过程,这个时候直接调用存储过程的方法就可以了。

  1. delimiter // -- 声明结束符
  2. create procedure 方法名()
  3. begin -- sql语句开始
  4. sql语句
  5. end -- sql语句结束
  6. // delimiter; -- 声明结束符
  7. call 存储过程方法名(); -- 调用存储过程

用存储过程添加一千条数据

  1. delimiter // -- 声明结束符
  2. --创建存储过程
  3. create procedure fanmao78()
  4. begin -- sql语句开始
  5. declare num int; -- 创建一个变量
  6. set num = 1; -- 赋予变量一个初始值
  7. while num<=1000 do -- 设置循环结束条件
  8. insert into lianxi values (num, "存储过程","无","Mysql",100,"2015-07-17 16:14:02"); -- sql语句
  9. set num = num+1; -- 每循环一次 num+1
  10. end while; -- 结束while循环
  11. end --sql语句结束
  12. // delimiter; --声明结束符
  13. call fanmao78(); --调用存储过程

创建一个查询20032班级学生分数的存储过程,显示学生名字,科目名字,成绩

  1. delimiter // #声明结束符
  2. create procedure 查询()
  3. begin #sql语句开始
  4. SELECT
  5. sname,cname,degree FROM
  6. student
  7. JOIN score ON student.sno = score.sno
  8. JOIN course ON score.cno = course.cno
  9. WHERE
  10. class = 20032;
  11. end #sql语句结束
  12. // delimiter; #声明结束符
  13. call 方法名(); #调用存储过程

索引

索引类型 说明
index 普通索引
primary key 主键
unique key 唯一索引
  1. #添加索引
  2. alter table 表名 add 索引类型 索引名(字段);
  3. alter table lianxi add index index_id (id);

DBeaver 连接工具

下载地址:https://dbeaver.io/files/dbeaver-ce-latest-x86_64-setup.exe

创建mysql连接
image.png

创建连接
image.png

打开创建好的连接
image.png

查看表中数据
image.png

新建sql编辑器,里面相当于navicat的查询
image.png