主键外键
主键和外键是在我们创建数据库的时候保证数据的完整性。
当有很多表的时候,表之间都是有关联的 。
mysql数据库中的一条记录中有若干个字段,若其中某一个字段能唯一标识一条记录,该字段就可以成为一个主键
比如
学生表(学号,姓名,性别,班级)
其中每个学生的学号是唯一的,学号就是一个主键
课程表(课程编号,课程名,学分)
其中课程编号是唯一的,课程编号就是一个主键
成绩表(学号,课程号,成绩)
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的字段组是一个主键
[
](https://blog.csdn.net/fengzongfu/article/details/78820485)
1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份证号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键
名字 | 定义 | 作用 | 个数 |
---|---|---|---|
主键 | 唯一标识一条记录,不能有重复的,不允许为空 | 用来保证数据的完整性 | 主键只有一个 |
外键 | 表的外键是另一表的主键,外键可以有重复的,可以是空值 | 用来和其他表进行联系用的 | 一个表可以有多个外键 |
创建学生表,并把id设置主键
create table student(
id int ,
name varchar(255),
sex varchar(255),
age int,
primary key(id) #设置id为主键,id不能重复,不能为空
);
创建分数表,并把id设置为student表的外键
create table score(
id int ,
cno varchar(255),
score int);
alter table 子表 add foreign key (子表的连接字段) references 父表(父表连接字段); #给表设置外键
alter table score add foreign key (id) references student(id);
视图
创建视图
create view 视图的名称 as select语句;
create view 员工薪资 as select * from price where post="员工";
#删除视图
drop view 视图名;
新建一个20032班级学生分数表视图,里面有学生名字,科目名字,成绩
CREATE VIEW 20032班级成绩表 AS SELECT
sname,cname,degree FROM
student
JOIN score ON student.sno = score.sno
JOIN course ON score.cno = course.cno
WHERE
class = 20032;
存储过程
存储过程就是特定的sql语句,只要不去其进行修改,编译一次之后就可以一直运行;
在表中添加1000条数据,像这种比较繁琐的工作就可以用存储过程实现,或者经常使用的特定的sql语句,也可以定义为存储过程,这个时候直接调用存储过程的方法就可以了。
delimiter // -- 声明结束符
create procedure 方法名()
begin -- sql语句开始
sql语句
end -- sql语句结束
// delimiter; -- 声明结束符
call 存储过程方法名(); -- 调用存储过程
用存储过程添加一千条数据
delimiter // -- 声明结束符
--创建存储过程
create procedure fanmao78()
begin -- sql语句开始
declare num int; -- 创建一个变量
set num = 1; -- 赋予变量一个初始值
while num<=1000 do -- 设置循环结束条件
insert into lianxi values (num, "存储过程","无","Mysql",100,"2015-07-17 16:14:02"); -- sql语句
set num = num+1; -- 每循环一次 num+1
end while; -- 结束while循环
end --sql语句结束
// delimiter; --声明结束符
call fanmao78(); --调用存储过程
创建一个查询20032班级学生分数的存储过程,显示学生名字,科目名字,成绩
delimiter // #声明结束符
create procedure 查询()
begin #sql语句开始
SELECT
sname,cname,degree FROM
student
JOIN score ON student.sno = score.sno
JOIN course ON score.cno = course.cno
WHERE
class = 20032;
end #sql语句结束
// delimiter; #声明结束符
call 方法名(); #调用存储过程
索引
索引类型 | 说明 |
---|---|
index | 普通索引 |
primary key | 主键 |
unique key | 唯一索引 |
#添加索引
alter table 表名 add 索引类型 索引名(字段);
alter table lianxi add index index_id (id);
DBeaver 连接工具
下载地址:https://dbeaver.io/files/dbeaver-ce-latest-x86_64-setup.exe
创建mysql连接
创建连接
打开创建好的连接
查看表中数据
新建sql编辑器,里面相当于navicat的查询