【博学谷学习记录】超强总结,用心分享|测试工程师必备技能总结:Linux 和数据库 day06 随堂笔记

Linux 和数据库 day06 随堂笔记

数据库设计

ER模型

定义: E 代表实体(数据表), R 代表联系(数据表之间对应的字段)


关系常见分类

一对一

一对多

多对多

外键

如果一个实体的某个字段指向另一个实体的主键,就称为外键。

被指向的实体,称之为主实体(主表),也叫父实体(父表)。

负责指向的实体,称之为从实体(从表),也叫子实体(子表)

作用: 对关系字段进行约束,当为从表中的关系字段填写值时,会到关联的主表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并报错

-- 主表

drop table if exists class;

create table class(

id int unsigned primary key auto_increment,

name varchar(10)

);

-- 从表

drop table if exists stu;

create table stu(

name varchar(10),

class_id int unsigned,

-- stu 表的 class_id 指向 class 表的 id, class_id 是

stu 表的外键

-- foreign key(自己的字段名) references 目标表名(目标表的

主键)

foreign key(class_id) references class(id)

);

扩展1 : 对应存在表添加外键

-- 扩展1 : 对于已经存在的表添加外键

-- alter table 从表名 add foreign key (从表字段)

references 主表名(主表主键);

alter table stu add foreign key (class_id)

references class(id);

扩展2 : 查看和删除外键

-- 扩展2 : 查看外键和删除外键

-- 查看外键

-- show create table 表名

show create table stu;

-- CREATE TABLE `stu` (

--   `name` varchar(10) DEFAULT NULL,

--   `class_id` int(10) unsigned DEFAULT NULL,

--   KEY `class_id` (`class_id`),

--   CONSTRAINT `stu_ibfk_1` FOREIGN KEY

(`class_id`) REFERENCES `class` (`id`)

-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8

-- 删除外键

-- alter table stu drop foreign key 外键名称

alter table stu drop foreign key stu_ibfk_1;

利用 Navicat 查看外键




索引

定义: 类似于图书中的目录, 能够起到快速检索数据的作用

作用: 对于大量数据进行查询效率优化时, 可以采取添加索引的策略

-- 索引应用检验案例

-- 开启时间监测

set profiling=1;

-- 查询示例数据 num = 10000 的值

select * from test_index where num = 10000;

-- 查看运行时间

show profiles;

-- 添加索引

-- create index 索引名称 on 表名(目标字段)

create index num_index on test_index(num);

-- 再次执行查询数据操作

select * from test_index where num = 10000;

-- 再次查看运行时间

show profiles;



扩展1: 查看索引

-- 扩展1 : 查看索引

-- show index from 表名

show index from test_index;



扩展2 : 创表时添加

-- 扩展2 : 创表时添加

create table create_index(

id int primary key,

name varchar(10) unique,  -- unique : 设置端唯一值

age int,

key(age) -- 指定添加索引方法

);

-- 查看索引

show index from create_index;

扩展3 : 删除索引

-- 扩展3 : 删除索引

-- drop index 索引名称 on 表名;

drop index age on create_index;


结论 : 索引在使用的时候能提高查询效率, 但是在进行插入/更新/删

除时, 索引会造成障碍, 因此需要在执行这些操作前, 先移除索引, 操作结束后, 重新添加索引即可

命令行中操作 MySQ

前提: 要进行操作系统环境中, 存在 MySQL 环境

登录 MySQL

mysql -u数据库用户名 -p数据库密码

例如:

mysql -uroot -p123456



数据库操作

查看所有数据库 : show databases;

使用数据库 : use 数据库名称;

查看当前使用的数据库 : select database();

创建数据库 : create database 数据库名称 charset=utf8;

删除数据库 : drop database 数据库名称;

查看所有数据库


使用数据库



查看当前使用的数据库名称



创建数据库



删除数据库


数据表操作

查看数据库中的所有数据表 : show tables;

查看表结构 : desc 表名;

查看创表语句 : show create table 表名;

注意 : 进入到数据库之后, 所有的 SQL 查询语句, 均可以正常使用!

查看所有数据表



查看表字段信息


查看创表语句



命令行和图形化页面操作步骤对比

连接数据库

查看数据库

选择数据库

新建查询

查看所有表

查看表结构

编写 SQL 查询语句


结论 : 命令行使用是为了在没有图形化工具的情况下, 应急使用操作数据库的手段

存储过程

定义 : 可以叫存储程序, 通过一定的代码逻辑, 将一句或多久SQL

语句进行封装, 通过调用存储过程, 快速实现其内部封装SQL语句操作

用途 : 可以用来向数据库中, 快速插入大量测试数据时使用

基本语法格式

delimiter // -- 取消默认结尾标识符 ; 的作用

create procedure 存储过程名(参数列表)

begin -- 代码逻辑的开始

SQL语句

end //

delimiter ; -- 还原默认结尾标识符 ; 的作用

调用方法

-- 在查询窗口中

call 存储过程名();

语法实现

-- 修改句尾标识符为'//'

delimiter //

-- 如果存在 test 存储过程则删除

drop procedure if exists test;

-- 创建无参数的存储过程 test

create procedure test()                

begin

-- 声明变量 i

declare i int;

-- 变量初始化赋值为 0

   set i = 0;

-- 设置循环条件: 当 i 大于 10 时跳出 while 循环

  while i < 10000 do

-- 往 datatest 表插入数据

       insert into datatest values (null, i);

-- 循环一次, i 加一

       set i = i + 1;

-- 结束 while 循环

  end while;

-- 查看 datatest 表数据

   select * from datatest;

-- 结束存储过程定义语句

end//

-- 恢复句尾标识符为';'

delimiter ;

事务

定义 : 所谓事务可以称之一个操作序列, 一系列操作要么都执行,要么就不执行. 对于数据库来讲, 对于数据的操作行为, 要么都实现, 要么都不实现, 最终需要确保写入到数据库的数据的一致性

(原子性)!

事务实现案例

前提: 数据表的数据引擎类型必须是 InnoDB (可以通过查看创表语句来确认)


-- 注意 : 出发事务操作一般是由修改数据操作产生(插入数据insert/更新数据update/删除数据delete)

-- 开启事务

begin;

-- 提交事务

commit;

-- 回滚事务

rollback;

视图

场景 : 能够封装 SQL 语句, 以类似于表的形式存在

-- 创建视图语法

-- 注意: 视图命名一般以 v_视图名称 形式实现

-- create view 视图名称 as select 语句;

create view v_goods as select goodsName 商品名称,

price 价格, num 数量, company 公司 from goods;

-- 视图的用法: 当成表查询使用即可

select * from v_goods;

-- 复杂 SQL 语句视图封装

select go.goodsName, ca.cateName from goods go inner

join category ca on go.typeId = ca.typeId;

-- 封装连接查询语句时, 如果存在重名字段名称, 需要通过别名进行

修改

create view v_goods_cate as select go.*, ca.id 序号,

ca.typeId 类型, ca.cateName from goods go inner join

category ca on go.typeId = ca.typeId;

select * from v_goods_cate;

-- 删除视图语句

-- drop view 视图名称

drop view v_goods_cate;

注意 : 视图可以起到隐藏真实数据表内容的作用

视图名称以 v 开头的原因



修改 MySQL 数据库密码

场景 : 遗忘数据库密码时使用

1. 修改数据库配置文件, 使之登录不需要密码

此操作需要具备服务器 root 账户权限

查找配置文件并修改

切换 root 用户

su -

定位配置文件位置

locate my.cnf

使用 vi 工具打开配置文件

vi /etc/my.cnf

在文件内容 [mysqld] 下方添加此内容, 保存后退出

skip-grant-tables


查看和获取 MySQL 配置文件


添加内容 跳过密码登录


保存文件修改内容退出


确认配置文件内容已经修改



重新启动 MySQL 服务

systemctl restart mysqld

重启完成可以通过查看状态命令进行验证

systemctl status mysqld

重启和查看 mysqld 服务


重新登录 MySQL 查看是否需要密码进行登录

确认不需要密码可以登录 MySQL



2. 登录数据库, 修改数据库账户密码

注意 : 本步骤为 SQL 语句, 需要在 mysql > 状态下执行

use mysql; -- 选择 mysql 数据库

-- 更新密码

-- 注意 : authentication_string 字段名需要根据 MySQL 版

本就行对应修改

-- update user set

authentication_string=password('新密码') where user =

'用户名';

update user set

authentication_string=password('123') where user =

'root';

-- 刷新权限

flush privileges;

3. 还原配置文件设置, 使之登录需要密码

还原配置文件设置与添加设置步骤基本相同

查找配置文件并修改

切换 root 用户

su -

定位配置文件位置

locate my.cnf

使用 vi 工具打开配置文件

vi /etc/my.cnf

使用 # 注释 [mysqld] 下方内容, 保存后退出

# skip-grant-tables



重新启动 MySQL 服务

systemctl restart mysqld

重启完成可以通过查看状态命令进行验证

systemctl status mysqld

重新使用修改后的密码登录 MySQL 即可

MySQL 日志的获取

注意 : MySQL 自带日志功能, 但是开启日志功能, 极其消耗数据库

性能, 因此默认情况下是不开启的

-- 查看日志功能是否开启

show variables like 'general%';

-- 开启操作

set global general_log = 1;

-- 关闭操作

set global general_log = 0;

-- 注意: 日志功能使用完成, 需要记得马上关闭, 避免影响数据库性

能!!!!!!

开启日志功能



关闭日志功能

你可能感兴趣的:(【博学谷学习记录】超强总结,用心分享|测试工程师必备技能总结:Linux 和数据库 day06 随堂笔记)