MySQL基础(三)

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

4.2 事务的特性


  • A :原子性
    说明事务是最小的工作单元,不可以再分。
  • C :一致性
    所有的事务要求:在同一个事务当中,所有操作必须同时进行,或者同时失败,保证数据的一致性。
  • I  :隔离性
    A事务和B事务之间具有一定的隔离。
    A和B事务同时操作同一个表,结果会怎么样?
  • D:持久性
    事务最终结束的一个屏障。事务提交,将没有保存到硬盘上的数据保存到硬盘上。


4.2.1 事务的隔离性


1 事务的隔离级别


  1. 读未提交:read uncommitted (最低的隔离级别)   《提交之前就可以读到》
  • 事务A可以读取到事务B未提交的数据
  • 脏读现象 (Dirty read)
  • 理论情况下
  1. 读已提交:read committed             《提交之后才能读到》
  • 事务A只能读取到事务B提交之后的数据
  • 解决了脏读现象
  • 不可重复读取数据
  • 每一次读取到的数据是真实数据
  1. 可重复读:repeatable read       《提交之后也读不到 :读取到开启事务时的数据。事务不结束数据就不会改变》
  • 事务A开启之后,每一次在事务A中读取到的数据都是一致的。即使事务B修改数据,事务A中读取到的数据依然没有改变。
  • 解决了不可以重复读问题
  • 出现幻影读:读取的数据都是幻想
  1. 序列化 / 串行化:serializable (最高的隔离级别)
  • 效率最高,解决所有问题
  • 事务要进行排队,不能并发!!


  • 查看事务隔离级别:


select @@tx_isolation


  • 设置全局隔离级别


set global transaction isolation level read uncommitted  -- 读wei


5 索引


  • 索引是在数据表字段上添加的,提高查询效率
  • 一个字段可以添加一个索引,多个字段联合起来也可以添加索引


添加索引条件:


  1. 数据量庞大
  2. 以条件查询的形式存在
  3. 很少的DML(insert 、update、delete)操作


5.1创建索引


  1. 创建索引语法:


create index 索引名 on 表名(字段);


  1. 删除索引


drop index 索引名 on emp;


底层原理:二叉树(B-tree)


  1. 查看索引
explain select * from 表 where 条件



5.2索引失效


  1. 模糊查询尽量避免以“%” 开始,则会开始进行索引查询,否则不会进行索引查询。索引查询时必须知道第一个字母是什么
  2. 使用 or 的情况失效,or两边字段同时有索引才会走索引。
  3. 复合索引,没有使用左侧的列查找
  4. where当中索引列参加了运算
  5. 在where当中索引列使用了函数


5.3 索引的分类


  1. 单一索引 :单个字段添加索引
  2. 复合索引 :两个或多个字段添加索引
  3. 主键索引 :主键上添加索引
  4. 唯一性索引 :具有unique 约束的字段上添加索引  (唯一性较弱的字段上索引用处不大)


union 不会使用索引失效


6 视图


view


  • 不同角度看同一份数据


6.1 创建视图


create view 视图名 as select * from 表名


  • 室友DQL语句才能以view的形式创建


6.2 删除视图


drop view 视图名


6.3 视图的CRUD


  • 视图的操作会影响到原表的操作。
  • 视图是一张临时表


7 DBA命令


7.1 新建用户


CREATE USER username IDENTIFIED BY 'password';


  • username:你将创建的用户名,
  • password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.


7.2 授权


grant all privileges on dbname.tbname to 'username'@'login ip' identified by 'password' with grant option;


  1. dbname=*表示所有数据库
  2. tbname=*表示所有表
  3. login ip=%表示任何ip
  4. password为空,表示丌需要密码即可登录
  5. with grant option; 表示该用户还可以授权给其他用户


用户权限表

权限名

权限描述

alter

修改数据库的表

create

创建新的数据库戒表

delete

删除表数据

drop

删除数据库/表

index

创建/删除索引

insert

添加表数据

select

查询表数据

update

更新表数据

all

允许任何操作

usage

只允许登录


7.2.1 回收授权


revoke privileges on dbname[.tbname] from username;
刷新权限:
flush privileges;


7.3 数据的导入导出


7.3.1数据的导出


  • 在dos命令窗口进行
    导出指定数据库

C:\Users\25849>mysqldump bookshop>D:\bookshop.sql -uroot -p123456


  • 导出指定表

C:\Users\25849>mysqldump bookshop emp> D:\ bookshop_emp.sql -uroot -p123456



7.3.2数据的导入


C:\Users\25849>mysql -uroot -p123456
mysql>create database bookshop;
mysql>use bookshop;
mysql>source D:\bookshop.sql


8 数据库设计的三规范


数据表的设计依据,对数据库表的设计


  • 第一范式(1NF):要求任何一张表必须要有主键,每一个字段为原子性,字段不可以再分。
  • 第二范式(2NF):建立在第一范式基础上,要求所有非主键字段完全依赖于主键,不存在部份依赖
  • 第三范式(3NF):建立在第二范式基础上,要求所有非主键字段直接依赖于主键,不存在传递依赖
  • 减少数据表的冗余


9 SQL高级应用


8.1 T-SQL程序设计


8.1.1 变量


  1. 全局变量

@@ -- @@开头的变量


  • 系统定于和维护,用户无法进行修改或管理
  1. 局部变量

declare @i int  -- 使用关键declare 声明变量 i,数据类型为:int


  • 局部变量赋值

-- 使用 set 或 select

set @i = 123

select @i = 1



8.1.2 流程控制语句


1 if 语句


# 类似 java 中的 if ··· else if ··· else
if <条件表达式>
 <命令行或程序块>
else 
 <命令行或程序块>


2 begin ··· end语句


BEGIN
 <命令行或程序块>
END


3 IF [NOT] EXISTS 语句


IF [NOT] EXISTS(select 子查询)
 <命令行或程序块>
else 
 <命令行或程序块>


4 CASE 语句


格式一:
CASE <表达式>
 WHEN <表达式> THEN <表达式>
 ···
 WHEN <表达式> THEN <表达式>
 [ELSE  <表达式>]
END
格式二:
CASE <表达式>
 WHEN <表达式> THEN <表达式>
 ···
 WHEN <表达式> THEN <表达式>
 [ELSE  <表达式>]
END
SELECT SNo,CNo,Score = 
 CASE
   WHEN Score is null THEN '未考'
   WHEN Score < 60  THEN '不及格'
   WHEN Score >= 60 AND Score <= 90 THEN '良好'
   WHEN Score >= 90 THEN '优秀'
 END
FROM SC
5 WHILE 语句
WHILE (条件)
 <命令行或程序块>


8.2存储过程


8.2.1 存储过程 的有点


  1. 模块化的程序设计
  2. 高效率的执行
  3. 较少网络流量
  4. 可以作为安全机制使用


8.2.2 存储过程的分类


  1. 系统存储的过程
  2. 用户自定义存储过程
  3. 扩展存储过程


8.2.3 创建存储过程


DROP TABLE IF EXISTS t_student;
CREATE TABLE t_student
(
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  age  INT(11) NOT NULL
);
INSERT INTO t_student VALUES(NULL,'懿',22),(NULL,'小懿',18);


8.3触发器


8.3.1 分类


  1. DML 触发器
  2. DDL 触发器


8.3.2 创建DML触发器


格式:


CREATE TRIGGER 触发器名称
ON { table | view }
{ FOR | AFTER | INSTEAD OF }
{ [INSERT] | [UPDATE] | [DELETE] }
AS
SQL语句[,...n]


例子:修改student 表数据,修改之后查询修改后的数据。


--创建修改之后的触发器
CREATE TRIGGER trig_student_After
ON student
FOR  UPDATE 
AS 
 PRINT 'THE TRIGGER IS AFTER'
 SELECT * FROM student


  • FOR 和AFTER 作用一样


8.3.3 创建DDL触发器


CREATE TRIGGER 触发器名称
 ON { ALL SERVER | DATABASE }
{ FOR | AFTER }
{ 事件类型|事件组}[,...n]
AS
SQL语句[,...n]
例子:插入数据库后输入 ‘创建数据库’
CREATE TRIGGER trig_create
ON ALL SERVER
 AFTER CREATE_DATABASE
AS
 PRINT '创建数据库'
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
Java 关系型数据库 MySQL
MySQL数据库基础
文章主要介绍MySQL数据库中一些常见的操作,为专栏文章,系列介绍
134 0
MySQL数据库基础
|
SQL 存储 关系型数据库
MySQL常用基础 - 小白必看(二)
概念:是一个数据定义语言 该语言部分包括: 1、对数据库的常用操作 2、对表结构的常用操作
96 0
MySQL常用基础 - 小白必看(二)
|
存储 SQL 缓存
MySQL数据库系列(一)------基础
数据不会随程序结束而消失
142 0
MySQL数据库系列(一)------基础
|
关系型数据库 MySQL 数据格式
【0基础学习mysql】之DML-表中数据的操作
【0基础学习mysql】之DML-表中数据的操作
111 0
【0基础学习mysql】之DML-表中数据的操作
|
关系型数据库 MySQL Java
MySQL数据库基础数据入门级[图文详解]
MySQL数据库基础数据入门级[图文详解]
MySQL数据库基础数据入门级[图文详解]
|
SQL 存储 人工智能
华为大佬的“百万级”MySQL笔记,基础+优化+架构一键搞定
前言 MySQL不用多说,大家都知道它是目前最为活跃热门的开源数据库,由于成本低,操作简易的特点,所以在互联网企业中被广泛使用,即使是头部的BATJ。由此可见,想要在互联网行业混得风生水起,或者说想要进入BATJ等一线互联网公司,那么熟练掌握MySQL必定是一块必要的敲门砖。 对于MySQL的使用,可能很多刚开始工作的开发人员还是挺陌生的,但要想学习又不知道从何开始,技术的落后自然会让人感到焦虑。实际上,学习MySQL,找对方法就能轻松搞定。 今天,特将华为大佬整理的“百万级”MySQL笔记分享给你们,从基础到优化再到架构,带你轻松上手,一键搞定。
|
存储 SQL JSON
|
关系型数据库 MySQL
MySQL基础(二)下
MySQL基础(二)下
91 0
MySQL基础(二)下
|
存储 SQL JSON
MySQL基础(二)中
MySQL基础(二)中
81 0
MySQL基础(二)中
|
存储 SQL NoSQL
MySQL基础(二)上
MySQL基础(二)上
154 0
MySQL基础(二)上