Mysql(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: Mysql(二)

⑥. 数据库的备份和还原


数据库的备份和还原


1>. 命令行:


语法:

备份:mysqldump -u用户名 -p密码 数据库名称 > 保存的路径

还原:

       1.登录数据库 2. 创建数据库

       3.使用数据库 4. 执行文件:source 文件路径


20190805174720470.png

2>. 图形化界面


20190805174926870.png

⑦. TCL:事务控制语言


1.TCP事务控制语言[Transaction Control Language]


1>.事务的介绍


事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行


2>. 事务的ACID属性 [ 面试题 ]


①. 原子性 [ Atomicity ]:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生


②. 一致性 [ Consistency ] :一个事务执行会使数据从一个一致转态切换到另外一个一致状态


③. 隔离性 [ Isolation ] :一个事务的执行不受其他事务的干扰


④. 持久性 [ Durability ]:一个事务一旦被提交,它对数据中的数据改变就是永久性的


3>. 事务的演示步骤


事务提交的两种方式:


* (1). 自动提交:

* mysql就是自动提交的

* 一条DML(增删改)语句会自动提交一次事务。

* (2). 手动提交:

* Oracle 数据库默认是手动提交事务

* 需要先开启事务,再提交


修改事务的默认提交方式:不建议修改

   查看事务的默认提交方式:SELECT @@autocommit;

   [-- 1 代表自动提交 0 代表手动提交 ]

   修改默认提交方式: set @@autocommit = 0;


步骤


①. 开启事务:start transaction

[ set autocommit=0(0就是开启事务这是把转态变成开启,1就是不开启事务),强调的是转态]

②. 编写事务中的sql语句(select、insert、update、delete)

语句1;

语句2;

③. 结束事务

commit提交事务

rollback回滚事务


use test;
create table account(
      id int primary key auto_increment,
      username varchar(20),
      balance double
);
insert into account(username,balance)VALUES("张无忌",1000),("赵敏",1000);
#开启事务
start transaction;
#set autocommit=0; 这是把事务的转态变成开启转态
#编写一组事务的语句;
update account set balance=500 where username='张无忌';
update account set balance=1500 where username='赵敏';
#结束事务[要么回滚,要么提交]  回滚:数据只存到了内存,实质没有改
rollback;
#commit;
select * from account;


2.数据库的隔离级别


对于同时运行的事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题


1>. 出现的问题


①. 脏读:对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段之后,若T2回滚,T1读取的内容就是临时且无效的


②. 不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段之后,T1在此读取同一个字段,值就不同了


③. 幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一个新的行之后,如果T1再次读取同一个表,就会多出几行


2>. 隔离级别


概念:

多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题


20190410161650311.png


注意:隔离级别从小到大安全性越来越高,但是效率越来越低


20190314155004299.png


查看隔离级别:select @@tx_isolation


②. 设置当前mysql的隔离级别:set session transaction isolation level 隔离级别


③. 设置数据库系统的全局的隔离级别set global session transaction isolation level 隔离级别


⑧. DCL


1>. 管理用户


①. 添加用户 :CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';


②. 删除用户:DROP USER '用户名'@'主机名';


③. 查询用户:SELECT * FROM USER;


    – 1. 切换到mysql数据库

        USE myql;

    – 2. 查询user表

        SELECT * FROM USER;


④. 修改用户密码


a. update user set password=password(‘新密码’) where user=‘用户名’;

b. SET PASSWORD FOR ‘用户名’@‘主机名’ = PASSWORD(‘新密码’);


mysql中忘记了root用户的密码?


1.cmd – > net stop mysql 停止mysql服务

* 需要管理员运行该cmd

2.使用无验证方式启动mysql服务: mysqld --skip-grant-tables

3.打开新的cmd窗口,直接输入mysql命令,敲回车。就可以登录成功

4.use mysql;

5.update user set password = password(‘你的新密码’) where user = ‘root’;

6.关闭两个窗口

7.打开任务管理器,手动结束mysqld.exe 的进程

8.启动mysql服务

9.使用新密码登录。

重新安装呀!


-- 1.查询user表 
# % 表示可以任意主机使用用户登录数据库
select * from user;
-- 2.创建用户
# create user '用户名'@'主机名' identified by '密码';
create user 'xiaozhi'@'localhost' identified by 'root';
create user 'xiaoxing'@'%' identified by 'root';
-- 3.删除用户
#drop user '用户名'@'主机名';
drop user 'xiaozhi'@'localhost';
-- 4.修改密码
#update user set password=password('新密码') where user='用户名';
update user set password=password('123') where user='xiaozhi';
#SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');


2>. 权限管理


①. 查询权限:show grants for ‘用户名’@‘主机名’

②. 授予权限:grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’;

③. 删除权限:revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’;


-- 查询权限
show grants for '用户名'@'主机名'
show grants for 'xiaoxing'@'%';
-- 授予权限
#grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
-- 给张三用户授予所有权限,在任意数据库任意表上
GRANT ALL ON *.* TO 'zhangsan'@'localhost';
-- 撤销权限:
#revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';


⑨. 视图


含义:虚拟表,和普通表一样使用。[mysql5.1版本出现的新特性,是通过表动态生成的数据]

创建视图:create view 视图名 as sql语句;

视图的修改: ①create or replace view 视图名 as sql语句 ②alter view 视图名 as 查询语句

视图的删除:drop view 视图名1,视图名2....

视图查看:desc 视图名


#1.查询姓名中包含a字符的员工名、部门名和工种信息
#①创建
create view myv1
as
select last_name,department_name,job_title
from employees e 
inner join departments d on e.department_id=d.department_id
inner join  jobs j on e.job_id=j.job_id;
#②使用
select * from myv1 where last_name like '%a%';
#2.查询各部门的平均工资 级别
#①创建视图查询每个部门的平均工资
create view myv2
as
select avg(salary) ag,department_id 
from employees 
gROUP BY department_id;
#②
select myv2.ag,g.grade_level from myv2 
inner join job_grades g
on myv2.ag BETWEEN g.lowest_sal and g.highest_sal;


2019031615070725.png



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9月前
|
监控 关系型数据库 MySQL
第1章 认识MySQL
第1章 认识MySQL
45 0
|
6天前
|
关系型数据库 MySQL Java
MySQL
【6月更文挑战第23天】
18 6
|
1月前
|
SQL 关系型数据库 MySQL
mysql
```sql 使用MySQL查询比数学系所有学生年龄大的学生姓名和所在系。代码如下: use teachingdb; SELECT sname, sdept, birthday FROM student WHERE birthday < ALL (SELECT birthday FROM student WHERE sdept = '数学'); ``` 摘要:该任务是查询比数学系学生年龄大的所有学生信息,包括姓名和所在系。通过在SQL中使用ANY/ALL操作符与子查询结合,这里选用ALL与MAX()函数等效,找出比数学系学生最晚出生日期还要早的所有学生。
19 0
|
7月前
|
关系型数据库 MySQL
MySQL问题汇总
MySQL问题汇总
49 0
|
SQL 存储 Oracle
盘点一下Mysql中的一些小知识(一)
盘点一下Mysql中的一些小知识(一)
64 0
|
SQL 搜索推荐 关系型数据库
MySQL的初步使用
引入 在之前的一篇文章中,我们一起过了一遍标准SQL语言的核心操作。标准sql语言适配市面上所有主流的RDBMS(即关系数据库管理系统 Relational DataBase Management System),你与任何一个RDBMS连接后,基本可以直接用所学命令进行操作了。
MySQL的初步使用
|
关系型数据库 MySQL
07_mysql中having的使用_having与where的对比
mysql中having的使用 having与where的对比
153 0
07_mysql中having的使用_having与where的对比
|
SQL JSON Oracle
MySQL 8.0来了,逆之者亡...
MySQL 8.0来了,逆之者亡...
156 0
MySQL 8.0来了,逆之者亡...
|
SQL 关系型数据库 MySQL
Mysql
笔记
111 1
|
SQL 存储 关系型数据库
MySQL8.0之快速加列
MySQL8.0 Online DDL
4909 2