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

tech2025-07-16  2

事务

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)