一看就懂的MySQL教程

  • 一、安装
  • 二、卸载
  • 三、配置
    • 1、MySQL服务启动
    • 2、MySQL登录
    • 3、MySQL 退出
  • 四、SQL
    • 1、什么是SQL
    • 2、SQL通用语法
    • 3、SQL分类
      • 1)DDL
      • 2)DML
      • 3)DQL
      • 4)DCL
  • 五、DDL:操作数据库、表
    • 1、操作数据库:CRUD
    • 2、操作表
  • 六、DQL:增删改表中的数据
    • 1、添加数据
    • 2、删除数据
    • 3、修改数据
  • 七、DQL:查询语句
    • 1、语法:
    • 2、基础查询
    • 3、条件查询
    • 4、排序查询
    • 5、聚合函数
    • 6、分组查询
    • 7、分页查询
  • 八、表的约束
    • 1、概念
    • 2、分类
      • 1.主键约束:primary key
      • 2.非空约束:not null
      • 3.唯一约束: unique,值不能重复
      • 4.外键约束:foreign key
  • 九、多表操作
    • 1、分类
  • 十、三大范式
    • 1、数据库设计的范式
      • 概念
      • 分类:
  • 十一、数据库的备份和还原
  • 十二、多表查询
    • 1.查询语法
    • 2.笛卡尔积
    • 3.多表查询的分类
    • 4.外连接查询
  • 十三、子查询
    • 1.概念:
    • 2. 子查询不同情况
  • 十四、事务
    • 1.概念
    • 2.操作
    • 3.例子
    • 4.MySQl数据库中事务默认自动提交
    • 5.事务的四大特征
    • 6.事务的隔离级别(了解)
  • 十五、用户管理和权限管理
    • 1.管理用户
    • 2.权限管理

一、安装

直接网上下载,看着提示安装就行,要是看不懂英文,手机版的有道词典是个好东西,可以拍照翻译!!!

二、卸载

1、去mysql的安装目录找到my.ini文件
复制datadir = “路径名”

2、卸载mysql

3、删除C:/programdata目录下的MySQL文件夹(如果找不到就是被隐藏了,点击所在窗口左上方的查看—>选项—>查看—>找到隐藏文件和文件夹设置为显示隐藏文件

三、配置

1、MySQL服务启动

法一:手动
右键点击我的电脑—>管理—>服务和应用程序—>服务—>找到MySQL,右键点击启动。

法二:
打开cmd命令,输入services.msc打开服务的窗口

法三:使用管理员打开cmd

  • net start mysql :启动mysql的服务
  • net stop mysql :关闭mysql的服务

2、MySQL登录

法 1: mysql -u root -p 密码
法 2:mysql -hip -u root -p 连接目标的密码
法 3:mysql – host = ip – user = root – password = 连接目标的密码

3、MySQL 退出

法1:exit
法2:quit

四、SQL

1、什么是SQL

Structured Query Language :结构化查询语言
其实就是定义了操作所有关系型数据库的规则,每一种数据库操作的方式存在不一样的地方,称为“方言”。

2、SQL通用语法

1、SQL语句可以单行或多行书写,以分好结尾
2、可使用空格和缩进来增强语句的可读性
3、MySQL数据的SQL语句不区分大小写,关键字建议使用大写
4、3种注释
**** 单行注释: -- 注释内容 # 注释内容mysql特有
**** 多行注释/*注释 */

举例:

3、SQL分类

1)DDL

(Data Definition Language)数据定义语言

  • 用来定义数据库对象:数据库、表、列等。
  • 关键字:create, drop,alter 等

2)DML

(Data Manipulation Language) 数据库操作语言

  • 用来对数据库表的数据进行增、删、改
  • 关键字:insert 、 dalect 、 update等

3)DQL

(Data Query Language)数据查询语言

  • 用来查询数据库中表的记录(数据)。
  • 关键字:select 、where等。

4)DCL

(Data Control Language)数据控制语言

  • 用来定义数据库的访问权限和安全级别,及创建用户。
  • 关键字:Grant、 revoke等。

五、DDL:操作数据库、表

1、操作数据库:CRUD

  1. c(Create):创建
    创建数据库

    create database 数据库名称;
    
    **创建数据库,判断不存在,再创建:**
    
    create database if not exists 数据库名称;
    
    **创建数据库,并指定字符集:**
    create database 数据库名称 character set 字符集名;
    ==eg==:***创建db4数据库,判断是否存在,并制定字符集为gbk***
    create database if not exists db1 character set gbk;
    
  2. R(Retrieve):查询
    查询所有数据库的名称:

     show databases;
    

    查询某个数据库的字符集(查询某个数据库的创建语句):

    show create database 数据库名称;
    

    eg:

  3. U(Update):修改
    修改数据库的字符集:

    alter database 数据库名称 character set 字符集名称;
    

    eg:

  4. D(Delete):删除
    删除数据库:

    drop database 数据库名称;
    

    eg:

    判断数据库存在,存在再删除(不会报错):

    drop database if exists 数据库;
    

    eg:

  5. 使用数据库
    查询当前正在使用的数据库名称:

    select database();
    

    eg:

    使用数据库,如果没有正在使用的数据库正在使用的会如上显示

    有正在使用的数据库,会如上显示

    使用数据库:

    use 数据库名称;
    

2、操作表

表举例:

  1. C(Create):创建
    1、语法:

    create table 表名(列名1  数据类型1,列名2  数据类型2,。。。。列名n  数据类型n);
    

    注意:最后一列,不需要加逗号(,)

    2、数据库类型(常用):
    1、int:整数类型
    age int
    2、double : 小数类型
    score double(5,2)[5是所有数字的总位数,2是小数的位数]
    3、date:日期,包含年月日,yyyy-MM-dd HH:mm:ss
    4、datetime:日期,包含年月日时分秒 yyyy- MM-dd HH:mm:ss
    5、timestamp:时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
    如果将来不给这个字段赋值,或赋值null,则默认使用当前的系统时间,来自动赋值
    6、varchar:字符串

    name varchar(20): -- 姓名最大20个字符
    -- zhangsan 8个字符    /张三  2个字符
    

    创建表:

    create table student(id int,name varchar(32),age int,score double(4,1),birthday date,insert_time timestamp);
    

    复制表:

    create table 表名 like 被复制的表名;
    

    eg:

  2. R(Retrieve):查询
    查询某个数据库中所有表名称:

    alter tables ;
    

    查询表结构:

    desc 表名;
    

    eg:

  3. U(Update):修改
    1、修改表名

    alter table 表名 rename to 新的表名;
    

    eg:

    2、修改表的字符集:

    alter table 表名 character set 字符集名称;
    

    eg:

    3、添加一列:

    alter table 表名 add 列名 数据类型;
    

    eg:

    4、修改列表名称 、类型:

    alter table 表名 change 列名 新列名 新数据类型;
    alter table 表名 modify 列名 新数据类型;
    

    eg:

    5、删除列:

    alter table 表名 drop 列表;
    

    eg:

  4. D(Delete):删除

    法1.drop table 表名;
    法2.drop table if exists 表名;
    

    eg:

六、DQL:增删改表中的数据

1、添加数据

  1. 语法

    insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
    

    注意:

    1. 列名和值要一一对应。
    2. 如果表名后,不定义列名,则默认给所有列添值
      insert into 表名 values(值1,值2,。。。值n);
      
    3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来
      eg:

2、删除数据

语法:

delete from 表名[ where  条件]

注意:

  1. 如果不加条件,则删除表中所有记录。
  2. 如果要删除所有记录
 delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
 truncate table 表名;  -- 推荐使用,效率更高,先删除表,然后再创建一张一样的表。

eg:

3、修改数据

语法:

update  表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];

eg:

注意:
如果不加任何条件,则会将表中所有记录全部修改。

eg:

七、DQL:查询语句

select * from 表名;

1、语法:

select 字段列表from表名列表where条件列表group by分组字段having分组后的条件order by排序limit分页限定

2、基础查询

  1. 多个字段查询:

    select 字段1,字段2,...from 表名;
    

    注意:
    如果查询所有字段,则可以使用*来代替字段列表。

  2. 去除重复:

    distinct
    
  3. 计算列:
    1)一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
    2)ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
    ***表达式1:哪个字段需要判断是否为null
    ***如果改字段为null后的替换值。

  4. 起别名:
    as:as也可以省略

3、条件查询

  1. where字句后跟条件
  2. 运算符

    • <、>、<= 、>=、=、<>;
      eg:

    • between…and;

    • in(集合);

    • like:模糊查询

      占位符:
      _:单个任意字符
      %:多个任意字符

    • is null;

    • and 或 &&;

    • or 或 ||;

    • not 或 !
      举例:
      建表:

      create table student(id int, -- 编号name varchar(20), -- 姓名age int, -- 年龄sex varchar(5), -- 性别address varchar(100), -- 地址math int, -- 数学english int -- 英语);
      

      添加数据:

       insert into student(id,name,age,sex,address,math,english) values(1,"马云",55,"男","杭州",66,78),(2,"n马化腾",45,"男","深圳",98,87),(3,"马景涛",55,"男","香港",56,77),(4,"柳岩",20,"女","湖南",99,99),(5,"柳青",20,"男","湖南",86,null),(6,"刘德华",57,"男","香港",99,99),(7,"马德",22,"女","香港",99,99),(8,"德玛西亚",18,"男","广东",56,65);
      

      查询举例:




4、排序查询

  • 语法: order by 子句

    order by 排序字段1   排序方式1,排序字段2  排序方式2,......
    

    - 排序方式:

     ASC:升序,默认的
    
     DESC:降序
    



    注意:
    如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

5、聚合函数

概念:将一列数据作为一个整体,进行纵向的计算。

  1. count:计算个数
    1、一般选择非空的列:主键
    2、count(*)

  2. max:计算最大值

  3. min:计算最小值

  4. sum:计算和

  5. avg:计算平均值

    eg:
    select max(math) from student;
    select min(math) from student;
    select sum(math) from student;
    


注意:
聚合函数的计算,排除null值。
解决方案:
1. 选择不包含非空的列进行计算
2. ifnull函数

6、分组查询

语法:

group by 分组字段;


可以取别名,方便一点:


注意:

  1. 分组之后查询的字段:分组字段聚合函数
  2. wherehaving的区别?
    1. where在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足限定, 则不会被查询出来
    2. where后不可以跟聚合函数,having可以进行聚合函数的判断。

7、分页查询

  • 语法:

    limit 开始的索引,每页查询的条数;
    

  • 公式:
    开始的索引 = (当前页码 - 1)* 每页显示的条数
    eg:

        ---- 每页显示3条记录select * from student limit 0,3;   -- 第一页select * from student limit 3,3;   -- 第二页select * from student limit 6,3;   -- 第三页```
  • limit 是一个MySQL的"方言"

八、表的约束

1、概念

对表的数据进行限定,保证数据的正确性、有效性和完整性。

2、分类

1.主键约束:primary key

  1. 注意:

    • 含义:非空且唯一
    • 一张表只能有一个字段为主键
    • 主键就是表中记录的唯一标识
  2. 在创建表时,添加主键约束

    create table stu(id int primary key, -- 给id添加主键约束name varchar(20));
    

  3. 删除主键

    -- 错误 alter table stu modify id intl;alter table stu drop primary key;
    
  4. 创建完表后,添加主键

    alter table stu modify id int primary key;
    
  5. 自动增长

    1. 概念:如果某一列是数值类型的,使用auto_increment 可以来完成值的自动增长

    2. 在创建表时,添加主键约束,并且完成自动增长

      eg:

      create table stu(id int primary key auto_increment, -- 给id添加主键约束name varchar(20));
      

      注意:
      自动增长,给选定值填入null是,会自动根据前一个数据加一

    3. 删除自动增长

      alter table stu modify id int;
      
    4. 添加自动增长

      alter table stu modify id int auto_increment;
      

2.非空约束:not null

  1. 创建表时添加约束

    create table stu(
    id int;
    name varchar(20) not null -- name为非空
    );
    

  2. 创建完表后,添加非空约束

    alter table stu modify varchar(20) not null;
    
  3. 删除name的非空约束

    alter tble stu modify name varchar(20) ;
    

3.唯一约束: unique,值不能重复

  1. 创建表时,添加唯一约束

    create table stu(id int,number varchar(20) unique --添加了唯一约束);
    

    注意:
    mysql中,唯一约束限定的列的值可以有多个null。

  2. 删除唯一约束

    alter table stu drop number;
    
  3. 在创建表后,添加唯一约束

    alter table stu modify number varchar(20)unique;
    

4.外键约束:foreign key

功能:让表与表产生关系,从而保证数据的正确性。

  1. 在创建表时,可以添加外键
    语法:

    create table 表名(...外键列constraint  外键名称 foreign key (外键列名称)references 主表名称(主表列名称)
    );
    
  2. 删除外键

    alter table 表名 drop foreign key 外键名称;
    
  3. 创建表之后,添加外键

    alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主列表名称);
    
  4. 级联操作

    1. 添加级联操作
      语法:

      alter table 表名 add constraint 外键名称 foreign key (外键字段名称)references 主表名称(主列表名称)on update cascade / on delete cascade;
      
    2. 分类:

      1. 级联更新:on update cascade
      2. 级联删除:on delete cascade

九、多表操作

1、分类

1.一对一(了解)

  • 如:人和身份证
  • 分析:一个人只有一个身份,一个身份证只能对应一个人
  • 实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。
    eg:

2、一对多(多对一)

  • 如:部门和员工
  • 分析:一个部门有多个员工,一个员工只能对应一个部门
  • 实现方式:在多的一方建立外键,指向一的方向的主键。
    eg:

3、多对多

  • 如:学生和课堂
  • 分析:一个学生可以选择很多课程,一个课程也可以被很多学生选择
  • 实现方式:多对多关系实现需要借助第三张中间表
    eg:

案例:

具体操作:
1.

-- 创建旅游线路分类表tab_category
-- cid 旅游线路分类主键,自动增长
-- cname旅游线路分类名称非空,唯一,字符串100
create table tab_category(cid int primary key auto_increment,cname varchar(100) not null unique);
-- 创建旅游路线表tab_route
/*
rid旅游线路主键,自动增长
rename旅游线路名称非空,唯一,字符串100
price价格
radate 上架时间,日期类型
cid外键,所属分类
*/
create table tab_route(rid int primary key auto_increment,rname varchar(100) not null unique,price double,cid int,foreign key(cid) references tab_category(cid));
-- 创建用户表tab_user
/*
uid用户主键,自增长
username用户名长度100,唯一,非空
password密码长度30,非空
name真实姓名长度100
birthday生日
sex性别,定长字符串1
telephone手机号,字符串11
email邮箱,字符串长度100
*/
create table tab_user(uid int primary key auto_increment,username varchar(100) unique not null,password varchar(30) not null,name varchar(100),birthday date,sex char(1) default"男",telephone varchar(11),email varchar(100));
-- 创建收藏表tab_favorite
/*
rid旅游路线id,外键
date收藏时间
uid用户id,外键
rid和uid不能重复,设置复合主键,同一个用户不能收藏同一个线路两次
*/
create table tab_favorite(rid int,date datetime,uid int,-- 创建复合主键primary key(rid,uid),forenign key (rid) references tab_route(rid),forenign key (uid) references tab_route(uid));

各表创建完后拖到架构设计器中,可以看到对应关系:

十、三大范式

1、数据库设计的范式

概念

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

其实简单一点就是建立各种外键或者拆分表,让所有数据唯一

分类:

  1. 第一范式(1NF):每一列都是不可分割的原子数据项

  2. 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
    几个概念:

    1. 函数依赖:A–>B,如果通过A属性(属性组)的值,可以确定唯一B的属性值,则称B依赖A
      例如:学号–>姓名(姓名依赖于学号)。 (学号,课程名称)–>分数
    2. 完全函数依赖:A–>B,如果A是一个属性组,则B属性值的确定需要依赖A属性中所有的属性值。
      例如:(学号,课程名称)–>分数
    3. 部分函数依赖:A–>B,如果A是一个属性组,则B属性值的确定只需要依赖于A属性组中某一些值即可。
      例如:(学号,课程名称)–> 姓名
    4. 传递函数依赖:A–>B,B–>C. 如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称C传递函数依赖于A
      例如:学号–>系名,系名–>系主任
    5. 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码。
      例如:该表的码为:(学号,课程名称)
      1、主属性:码属性组中的所有属性
      2、非主属性:除过码属性组的属性
  3. 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

    第二范式能解决图中(即第一范式存在的)第一条问题
    第三范式能解决第二和第三条问题

十一、数据库的备份和还原

  • 命令行:
    语法:
    备份(在dos命令里输入):mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
    还原:
    1. 登录数据库
    2. 创建数据库
    3. 使用数据库
    4. 执行文件:source 文件路径

十二、多表查询

1.查询语法

select 列名列表
from表名列表
where......

准备SQL:

2.笛卡尔积

  1. 有两个集合A、B,取这两个集合的所有组成情况。
  2. 要完成多表查询,需要消除无用的数据

3.多表查询的分类

  1. 内连接查询:
    1. 隐式内连接:使用where条件消除无用数据
    例子:

    -- 查询所有员工信息和对应的部门信息
    select * from emp,dept  where emp."dept_id" = dept."id";
    -- 查询员工表的名称,性别。部门表的名称
    select emp.name,emp.gender,dept.name from emp,dept where emp."dept_id"  = dept."id";select
    t1.name,     -- 员工表的姓名
    t1.gender,  -- 员工表的性别
    t2.name  -- 部门表的名称
    from
    emp t1,
    dept t2
    where
    t1."dept_id" = t2."id";
    
    1. 显示内连接
      语法:

      select 字段列表 from 表名1  [inner] join 表名2 on 条件
      

      例如

      select * from emp inner join dept on emp."dept_id" = dept."id";
      select * from emp join dept on emp."dept_id" = dept."id";
      
    2. 内连接查询(注意事项)
      1、 从那些表中查询数据
      2、条件是什么
      3、查询那些字段

4.外连接查询

  1. 左外连接:
    语法

    select 字段列表 from 表1 left  [outer] join 表2 on 条件;
    

    查询的是左表所有数据以及其交集部分
    例子:

    -- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称
    select  t1.*t2."name"  from emp t1 left  join dept t2 on t1."dept_id" = t2."id";
    
  2. 右外连接
    语法:

    select 字段列表 from 表1 right  [outer] join 表2 on 条件;
    

    查询的是右表所有数据以及其交集部分
    例子:

    select  t1.*t2."name"  from dept t1 right  join emp t1 on t1."dept_id" = t2."id";
    

十三、子查询

1.概念:

查询中嵌套查询,称嵌套查询为子查询。

```sql
-- 查询工资最高的员工信息
-- 1.查询最高的工资是多少 9000
select max(salary) from emp;
-- 2.查询员工信息,并且工资等于9000的;
select * from emp where emp."salary" = 9000;
-- 一条SQL就完成这个操作:子查询
select * from emp where emp."salary" = (select max(salary) from emp);
```

2. 子查询不同情况

  1. 子查询的结果是单行单列的
    子查询可以作为条件,使用运算符去判断。 运算符:> >= < <= =
    例子:

     ```sql-- 查询员工工资小于平均工资的人select * from emp where emp.salary < (select avg(salary) from emp);```
    
  2. 子查询的结果是多行单列的
    子查询可以作为条件,使用运算符in去判断。

     -- 查询“财务部”和“市场部”所有的员工信息select  id from dept where  name = "财务部" or name = "市场部";select * from emp where dept_id = 3 or dept_id = 2; ```用子查询:```sqlselect * from emp where dept_id in (select  id from dept where  name = "财务部" or name = "市场部");```
    
  3. 子查询的结果是多行多列的
    子查询可以作为一张虚拟表参与查询

    -- 查询员工入职日期是2011-11-11日之后的员工信息和部门信息
    --子查询
    select * from dept t1,(select * from emp where emp."join_date" > "2011-11-11") t2 where t1.id = t2.dept_id;
    -- 普通内连接
    select * FROM emp t1,dept t2 where t1."dept_id" = t2."id" and t1."join_date" > 2011-11-11;
    

十四、事务

事务举例:

1.概念

如果一个包含步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。

2.操作

  1. 开启事务:start transaction;
  2. 回滚:rollback;
  3. 提交:commit;

3.例子


添加数据:



4.MySQl数据库中事务默认自动提交

  1. 事务提交的两种方式:

    1. 自动提交
      *mysql就是自动提交的
      *一条DML(增删改)语句会自动提交一次事务。
    2. 手动提交:
      *Oracle数据默认是手动提交事务
      *需要先开启事务,再提交
  2. 修改事务的默认提交方式:
    1. 查看事务的默认提交方式:

      select @@autocommit; -- 1 代表自动提交 0代表手动提交
      
    2. 修改默认提交方式:

      set @@autocommit = 0;
      

5.事务的四大特征

  1. 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
  2. 持久性:当事务提交或回滚后,数据库会持久化保存数据
  3. 隔离性:多个事务之间,相互独立
  4. 一致性:事务操作前后,数据总量不变

6.事务的隔离级别(了解)

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

  2. 存在问题
    1. 脏读:一个事务,读取到另一个事务中没有提交的数据
    2. 不可重复读(虚读):在同一个事务中,两次读取到的事务不一样
    3. 幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。

  3. 隔离级别

    1. read uncommitted:读未提交
      产生问题:脏读、不可重复读、幻读
    2. read committed:读已提交(Oracle)
      产生问题:不可重复读、幻读
    3. repeatable read:可重复读(MySQL默认)
      产生问题:幻读
    4. serializable:串行化
      可以解决所有问题

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

    数据库查询隔离级别:

    select @@tx_isolation;
    

    数据库设置隔离级别:

    set globlal transaction isolation level 你别字符串;
    

    设置隔离级别eg:
    查看隔离级别:

隔离案例:

第一个窗口表示张三,执行转账操作后并没有提交事务

第二个窗口代表李四,在张三没有提交事务的情况下查询到已经转账,然后写了欠条,具备法律效应了

但是,张三一回滚

李四第二次查账的时候发现钱没过来

但是这时候李四已经写下了具有法律效应的欠条,所以在没收到张三钱的情况下反倒欠张三500块

这就是脏读
上面的是第一隔离级别

——————————————————————————————
我们重新设置第二个隔离级别

这回在张三没提交之前,李四查询不到钱到账

只有当张三提交之后,李四才查询到修改的数据


——————————————————————————————

设置为第三隔离级别,同时开启事务

李四查询不到转账记录


当张三提交事务后李四还是查询不到记录



只有当李四也提交之后才能查询到记录

这样就解决了不可重复读的问题

——————————————————————————————

设置为第四个隔离级别

在张三还没提交时,李四不可以查询记录,光标一直在闪

只要张三一提交,李四立马就会显示查询结果

十五、用户管理和权限管理

1.管理用户

  1. 添加用户
    语法:

    create user “用户名” @“主机名” identified by “密码”;
    
  2. 删除用户
    语法:

    drop user “用户名” @“主机名”;
    
  3. 修改用户密码

    update user password = password("新密码") where user = "用户名";
    update user password = password("abc") where user = "lisi";
    
    set password for  "用户名"@"主机名" = password("新密码");
    set password for  "root"@"localhost" = password("123");
    

    mysql中忘记了root密码怎么办?
    1. cmd --> net stop mysql 停止mysql服务
    需要管理员打开该cmd
    2. 使用无验证方式启动mysql服务:mysql – skip - grant - tables
    3. 打开新的·cmd窗口,直接输入mysql命令,敲回车。就可以登陆成功
    4. use mysql;
    5. update user set password = password(“你的新密码”) where user = “root”;
    6. 关闭两个窗口
    7. 打开任务管理器,手动结束mysql.exe的进程
    8. 启动mysql服务
    9. 使用新密码登录

  4. 查询用户

    -- 1. 切换到mysql数据库
    user mysql;
    -- 2.查询user表
    select * from user;
    

    通配符:% 表示可以在任意主机使用用户登录数据库

2.权限管理

  1. 查询权限

    show grants for  "用户名"@"主机名";
    show grants for "lisi"@"%";
    
  2. 授予权限

    grant 权限列表 on 数据库名.表名 to "主机名";
    -- 给张三用户授予所有权限,在任意数据库任意表上
    grant all on *.* to "zhangsan"@"localhost";
    
  3. 撤销权限

    revoke 权限列表 on 数据库名.表名 from "用户名"@"主机名";revoke update on db3."account" from "lisi"@"%"
    

关于mysql就分享到这里,请继续关注小编哦~~

一看就懂的MySQL教程相关推荐

  1. 一看就懂的MySQL的FreeList机制

    Hi,大家好!我是白日梦! 今天我要跟你分享的MySQL话题是:"了解InnoDB的FreeList吗?谈谈看!" 本文是MySQL专题的第 7 篇,共110篇. 一.回顾 前面几 ...

  2. 一看就懂的ReactJs教程

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...

  3. java还原三阶魔方_魔方小站四阶魔方教程2 一看就懂的魔方教程(魔方玩法视频教程+还原公式一步一步图解+3D动画)...

    形成下图的样子, 这一步很简单,只需要学会一个很好理解的技术就行了,请看下面标准情况的例子,魔方 您可以用鼠标拖拽3D动画里的整个魔方,以看到魔方背面的变化. TR U' R U 我们要合并位于前面的 ...

  4. php - 超详细将 pdf 文档格式转换为图片格式,将 offce pdf 演示文稿转成图像 png / jpg(小白一看就懂的详细教程,附带完整示例源代码)

    效果图 其他教程都有点乱而且有bug,本文站在新手小白的角度比较靠谱,超详细的完整流程及详细注释代码. 本文实现了 php 将 pdf 文档转为图片(png / jpg),完整流程及示例源代码, 你可 ...

  5. 前端app调起摄像头 只显示在页面_猫也能看得懂的教程之一分钟使用Vue搭建简单Web页面...

    本教程适合人群: 已经了解过过html.js.css,想深入学习前端技术的小伙伴 有前端开发经验.但是没有使用过Vue的小伙伴 有过其他编程经验,对前端开发感兴趣的小伙伴 学习本教程之后你将会: 了解 ...

  6. 小白都能看懂的实战教程 手把手教你Python Web全栈开发(DAY 1)

    小白都能看懂的实战教程 手把手教你Python Web全栈开发 Flask(Python Web)实战系列之在线论坛系统 第一讲 博主博客文章内容导航(实时更新) 更多优质文章推荐: 收藏!最详细的P ...

  7. c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事

    一.学习目标 了解C语言的结构体的使用方法 了解C语言结构体的结构的赋值 了解多种C语言结构体变量的赋值方法和取值方法 目录 <零基础看得懂的C语言入门教程>--(二)简单带你了解流程 & ...

  8. python爬虫简单实例-最简单的Python爬虫案例,看得懂说明你已入门,附赠教程

    原标题:最简单的Python爬虫案例,看得懂说明你已入门,附赠教程 这是最简单的Python爬虫案例,如果你能看懂,那么请你保持信心,因为你已经入门Python爬虫,只要带着信心和努力,你的技术能力在 ...

  9. 《零基础看得懂的C++入门教程 》——(10)面向对象

    一.学习目标 了解C++类是什么 了解类对象与类型修饰一样进行创建 了解了类的属性如何使用 了解了类方法的使用方法 目录 预备第一篇,使用软件介绍在这一篇,C++与C使用的软件是一样的,查看这篇即可: ...

最新文章

  1. BZOJ3769:BST again(记忆化搜索DP)
  2. html支持了3种类型的按钮即,第3章HTML5.ppt
  3. TC工具后台模式_聊天能赚钱?来聊后台批量添加账号,伪装女性聊天赚钱内幕...
  4. C++ 获取文件大小
  5. sugarnms网管软件实用吗?
  6. 向量加减法首尾规律_向量加减口诀首尾相接
  7. 改名之后的 Java EE,现在有什么新进展?
  8. 浏览器从输入到输出的过程与原理一
  9. 使用Julia进行图像处理--使用形态学运算进行图像调整
  10. 《Python核心编程》第12章 习题
  11. 使用讯飞tts实现安卓语音中文合成播报
  12. c语言求闰年while,基础练习 闰年判断 c语言
  13. 阶乘的0 【南阳 oj 题目84】
  14. 毕业寄语 | 关于毕业季的温柔文案
  15. SuperMap BIM+GIS-Revit模型处理-背景
  16. Excel数据合并到统计分析自动处理的python示例(精益办公实战1)
  17. 智子观测宣布和数榜签约合作,强化大数据采集技术
  18. RHEL5.5下载地址及安装序列号
  19. APP (UniAPP) 微信支付回调的 HTTP_RAW_POST_DATA 报错情况 (wxpayv3)
  20. 【Gulimall】Spring Cloud:spring-cloud-gateway、spring-cloud-openfeign,Alibaba的注册+配置中心Nacos

热门文章

  1. 神经网络中的线性和非线性---学习笔记
  2. 二手车数据分析(Python)
  3. shell-xargs
  4. 罗斯蒙特2088变送器
  5. 以太坊和Hyperledger Fabric之间的差异
  6. 小程序中的block
  7. Perl常用模块使用例子
  8. 服务器设置播放mp4文件,服务器设置播放mp4视频
  9. 京东夺宝岛抢拍插件(转)
  10. 论文翻译:Speech Super Resolution Generative Adversarial Network