SQL——事务、事务练习题、索引、SQL用户账号操作、备份、

事务

ACID务必了解清楚在看下面https://blog.csdn.net/dengjili/article/details/82468576(引用)


原子性:要么都成功,要么都失败。


一致性:事务前后的数据完整性要保证一致。意思是前面两个人200和三百总和是五百,如果相互转移了数据总和因该也是五百。


持久性:事务一但提交就不客逆了,被永久的保存在数据库中了。


隔离性:事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

隔离的问题

脏读:
指一个事务读取了另外一个事务未提交的数据。

不可重复读:
在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)

虚读(幻读):
是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。
(一般是行影响,多了一行)

https://www.bilibili.com/video/BV1NJ411J79W?p=28

事务练习语句:流程如下

-- 手动处理事务(先关闭事务)
SET autocommit=0   -- 事务关闭语句,关闭事务的自动提交功能

-- 事务开启
START TRANSACTION  -- 标记一个事务的开始,执行这语句过后sql都在同一个事务中了

INSERT xx -- 插入事务
INSERT xx -- 插入事务

COMMIT -- 提交语句,当事务成功执行

ROLLBACK -- 回滚语句,意思是回到原来的样子,当事务失败执行

-- 事务结束
SET autocommit=1   -- 事务开启语句,这个是默认的,让事务自动提交

-- 事务保存
SAVEPOINT 保存位置名  -- 设置一个事务的保存位置
ROLLBACK TO SAVEPOINT 保存位置名 -- 回滚到保存点
RELEASE SAVEPOINT 保存位置名 -- 撤销保存点

一个事务可以拥有多个保存点

事务练习题

-- 创建数据
CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf_general_ci -- 创建一个数据库

USE shop  -- 使用shop这个数据库操作

-- 创建一个表
CREATE TABLE `account`-- 创建一个表,表名为account
`id` INT(4) NOT NULL AUTO_INCREMENT, -- 创建一个id字段int类型4个字节,不能为null并且自增
`name` VARCHAR(30) NOT NULL, -- 创建一个name字段varChar类型30个字节,不能为null
`money` DECIMAL(9,2) NOT NULL, -- 创建一个money字段decimal类型小数2位总长9位,并且不能为null
PRIMARY KEY(`id`) -- 将id设置为主键ENGINE=INNODB DEFAULT CHARSET=utf8 -- 表属性


-- 生成数据
INSERT INTO account(`name`,`money`) --给name、money插入数据
VALUES ('A',2000.00),('B',10000.00) -- 插入两行数据,一个是名字A,2000money,一个是名字B,10000money,由于id是自增的说以不用管

-- 模拟转账行为(事务功能)
SET autocommit=0-- 关闭自动提交
START TRANSACTION --开启一个事务,现在起执行语句都是一个事务
UPDATE account SET money=money-500 WHERE `name`='A'  -- A的money减少500
UPDATE account SET money=money+500 WHERE `name`='B'  -- B的money增加500
COMMIT; --提交语句 ,当转账正常执行该语句,保存数据到数据库
ROLLBACK-- 回滚语句,当转账不正常执行该语句,这样数据库数据不会变动
SET autocommit=1-- 恢复自动提交功能

https://www.bilibili.com/video/BV1NJ411J79W?p=29


索引

mySQL官方对索引的定义为:索引是帮助mySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。

  • 主键索引(PRIMARY KEY)
  • 唯一索引(UNIQUE KEY)
  • 常规索引 (KEY或者INDEX)
  • 全文索引 (FULLTEXT)

索引的使用
1、在创建表的时候给字段添加索引
2、创建完毕后,添加索引

SHOW INDEX FROM 表名  -- 查询该表的索引信息

ALTER TABLE 库名.表名 ADD FULLTEXT INDEX `字段名``字段名字`);
-- 修改索引将字段改为全文索引(FULLTEXT)

EXPLAIN SELECT*FROM 表名; -- 非全文索引

EXPLAIN SELECT*FROM 表名 WHERE MATCH(字段) AGAINST('关键字'); -- 查询关键字的信息

https://www.bilibili.com/video/BV1NJ411J79W?p=30

索引例子

-- CREATE INDEX 索引名 ON 表(字段)
CREATE INDEX id_表名_字段名 ON 表名(`字段名`)
--原理就是给字段创建了一个隐形的字段,每个值有一个唯一的数字,当查询的时候就直接去查找这个数字一样
-- 所以提升了查询速率

例子位置https://www.bilibili.com/video/BV1NJ411J79W?p=31

索引原则

1、索引不是越多越好
2、不要给经常变动的数据加索引
3、少量数据不需要添加索引,因为用处不大
4、索引一般添加在常用的字段上来查询
扩充知识点(很重要)http://blog.codinglabs.org/articles/theory-of-mysql-index.html
*
学习地址https://www.bilibili.com/video/BV1NJ411J79W?p=32

SQL用户账号操作

CREATE USER 用户名 IDENTIFIED BY '密码' --创建一个用户

SET PASSWORD = PASSWORD('修改的密码')--修改密码
SET PASSWORD FOR 用户名= PASSWORD('修改的密码')--给指定的用户修改密码

RENAME USER 旧用户名称 TO 新用户名称  --修改用户名

--用户授权 ALL PRIVILEGES  全部的权限     *.*(是  库.表   *是全部的意思)
--ALL PRIVILEGES 除了给别人授权不行,其他的都能干
GRANT ALL PRIVILEGES ON *.* TO 用户 --给该用户所有的权限

--查询权限
SHOW GRANTS FOR 用户  --结果为用户权限的语句

-- 撤销权限 REVOKE
REVOKE ALL PRIVILEGES ON *.* FROM 用户名
-- 撤销该用户名的说有权限

DROP USER 用户名 --删除该用户

https://www.bilibili.com/video/BV1NJ411J79W?p=33

备份

备份的直接操作可以选中后右键备份。
命令备份是在Win中备份备份方法

在这里插入图片描述

https://www.bilibili.com/video/BV1NJ411J79W?p=34


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值