索引
在企业真实环境中,用户数据往往至少百万级别的数据,当表中的数据量达到一定的程度之后,有些sql语句查询会比较慢。添加索引可以提高数据库的查询速度。
Mysql 数据库安装
数据库-01
下载 MySQL 安装包地址 : https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.25-1.el7.x86_64.rpm-bundle.tar
也可以直接从语雀下载
测试服务器连接
Host: 1.117.45.85
port: 3306
username: fanmao
password: ABCfanmao55..
创建数据库
-- 显示所有的数据库
show databases;
删除数据库
-- 删除数据库
DROP database 棍棍;
创建数据库
-- 创建数据库
create database gungun;
---
create database if not EXISTS gungun; -- 如果不存在gungun 数据库就创建
---
CREATE DATABASE if not EXISTS huahua
DEFAULT character set utf8 -- 设置字符集为 utf8
DEFAULT collate utf8_bin; -- 设置校验规则;
创建数据表
数据表存在数据库中,首先选择使用的数据库,
create table student (
id int(10),
name varchar(10),
age int(3)
)
练习
创建数据库, 数据库的名字为 huahua_5501 (5501改为自己的学号)
CREATE DATABASE if not EXISTS huahua_5501 DEFAULT character set utf8 -- 设置字符集为 utf8 DEFAULT collate utf8_bin; -- 设置校验规则;
使用自己创建的数据库
use huahua_5501;
在自己的数据库中创建 表 student
- 表的列 | id | int | 序号 | | —- | —- | —- | | sname | varchar(50) | 学生姓名 | | birthday | datetime | 学生的生日 | | classid | varchar(10) | 班级编号 |
CREATE TABLE student
(
id int(10), -- int 表示数字 最长10位的数字
sname VARCHAR(50), -- VARCHAR 表示内容为字符串 50 最长长度
birthday datetime, -- datetime 表示日期
classid varchar(10) --
)
数据库表的数据类型
参考 https://www.runoob.com/mysql/mysql-data-types.html
添加数据
INSERT INTO `huahua_5500`.`student`
(`id`, `sname`, `birthday`, `classid`)
VALUES
(1, '张山', '2021-07-05 15:12:06', '101');
-- 添加数据
insert into student
(sname) -- 列名
VALUES
("hh") -- 具体的内容
SELECT * from student;
更新数据
update student set sname="hahahahaha" WHERE id = "4";
-- 名字为张三的人员 改为 李四
update student set sname="李四" WHERE sname="张山";
删除表
-- 1. 清空表数据, 表还在 数据没有
TRUNCATE TABLE student;
select * from student;
将表删掉, 表不存在。
-- 2. 删除表
DROP TABLE student;
Select * from student;
主键,外键
创建表 student
字段名 | 数据类型 | 为Null | 主键 |
---|---|---|---|
id | int | Not Null | Primary key |
sname | varchar(50) | Not Null | 否 |
birthday | datetime | Not Null | 否 |
sex | varchar(2) | Not Null | 否 |
输入表名
练习
创建表 checkin 考勤表
字段名 | 数据类型 | 为Null | 主键 |
---|---|---|---|
id | int | not null | yes |
pno | varchar(50) | not null | no |
checktime | datetime | not null | no |
CREATE TABLE `huahua_5500`.`checkin` (
`id` int NOT NULL AUTO_INCREMENT,
`pno` varchar(50) NOT NULL,
`checktime` datetime NOT NULL,
PRIMARY KEY (`id`)
);
创建表 person 人员表
字段名 | 数据类型 | 为Null | 主键 |
---|---|---|---|
id | int | not null | yes |
pno | varchar(50) | not null | no |
pname | varchar(50) | not null | no |
CREATE TABLE `huahua_5500`.`person` (
`id` int NOT NULL AUTO_INCREMENT,
`pno` varchar(50) NOT NULL,
`pname` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
);
添加数据 Person
id | pno | pname |
---|---|---|
1 | A001 | 张莹佩 |
2 | A002 | 王青渊 |
checkin数据
id | pno | checktime |
---|---|---|
1 | A001 | 2021-07-06 12:00:00 |
2 | A002 | 2021-07-06 12:00:01 |
3 | A002 | 2021-07-06 12:00:03 |
4 | A002 | 2021-07-06 02:00:00 |
5 | A002 | 2021-07-07 12:00:00 |
INSERT INTO `huahua_5500`.`checkin`(`pno`, `checktime`) VALUES ('A001', '2021-07-06 16:40:25')
查询 今天考勤的数据, 输出 pno,pname,checktime
外键
在上面的练习中,现有 Person 表, 才会有 checkin 考勤表。 考勤表中的 pno 来源 person。
外键是一种约束。
考勤表中的 pno 必须是真实存在的,也就是说 首先在 Person 人员表中创建好人员数据,再在 checkin表中添加考勤数据时 pno数据必须依赖 person。
这时就需要创建外键约束;
注意事项:
- 先分析业务逻辑,排在后面表上创建 外键约束;
- 被引用父表 就是 排在前面的表。
- 先有 Person 创建人员表, 后有checkin 考勤表, 所以外键建在checkin 表上面
- 创建的是时候, 两个表中的 pno 保持一致, 被引用的父表 使用 person 表。
在checkin 表中添加数据的时候,会自动检查 pno 数据,如果添加的pno 数据不对,那么保存就失败。(数据约束)
问题
- 连接MySQL 出现 too many connections
-- 查看最大的连接数
show variables like "max_connections";
-- 设置最大链接数
set global max_connections = 2000;
作业
- (可选项) 参考上述的数据库搭建操作,在自己的服务器上搭建MySql 数据库。
- 创建下main
teacher 表
字段名 | 数据类型 | 为Null | 主键 | 备注 |
---|---|---|---|---|
id | int | not null | yes | 序号 |
tno | varchar(50) | not null | no | 老师工号 |
cno | varchar(50) | not null | no | 课程编号 |
tname | varchar(50) | not null | no | 老师名字 |
course 表
字段名 | 数据类型 | 为Null | 主键 | 备注 |
---|---|---|---|---|
id | int | not null | yes | 序号 |
cno | varchar(50) | not null | no | 课程编号 |
cname | varchar(50) | not null | no | 课程名称 |
student 表
字段名 | 数据类型 | 为Null | 主键 | 备注 |
---|---|---|---|---|
id | int | not null | yes | 序号 |
sno | varchar(50) | not null | no | 学生学号 |
sname | varchar(50) | not null | no | 学生姓名 |
adj 选课表
字段名 | 数据类型 | 为Null | 主键 | 备注 |
---|---|---|---|---|
id | int | not null | yes | 序号 |
sno | varchar(50) | not null | no | 学生学号 |
cno | varchar(50) | not null | no | 课程编号 |
表之间的关系为
- 给上述四个表添加外键
- 给上述表分别添加一些数据 (自由添加)
- 查询选修了语文课的所有学生,输出 老师名字,学生名字,课程名字。
select tname,sname,cname from course inner join teacher on teacher.cno = course.cno inner join adj on adj.cno = course.cno inner join student on student.sno = adj.sno where course.cname ='语文'