MYSQL数据库的TCL语言和DCL语言是什么

71次阅读
没有评论

共计 2640 个字符,预计需要花费 7 分钟才能阅读完成。

本篇内容介绍了“MYSQL 数据库的 TCL 语言和 DCL 语言是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、TCL 语言的操作语法,有时候我们的一个需求 (一个任务), 可能会涉及到多个 DML(增删改) 操作。那么这一系列操作,我们要看成一个整体,不可切割。如在一个员工系统中,某员工 A 的数据可能会存在多个表中,如基本信息表, 业务信息表,邮箱信息表等。当我们想删除此人的所有信息时,除了删除这个人的基本信息外,还应该删除与此人有关的其他所有信息,如邮箱,地址等等。这样的操作会涉及到多个 DML 语句。那么从开始执行到真正结束,就会构成一个事务(Transaction)。对于事务,我们要保证事务的完整性,不能分割。事务要么成功,要么撤回(回到执行前),不能执行一部分就终止。

注意,只有 DML 操作时,才会涉及到事务。而 mysql 数据库在执行完每一个 DML 操作时,会默认 commit; 可以使用 start transaction 来取消自动提交

commit:用于提交,表示事务成功结束。用于确认数据的更改,持久化。

rollback:用于回滚,回退到事务开始前。取消所有的 DML 操作。

savepoint: 设置事务的保存点,可以回退到指定的保存点。

事务有四个基本特征,简称 ACID.

(1) 原子性(Atomicity):即事务要么成功,要么撤回,不可切割。(2) 一致性(Consistency):事务开始前和结束后,要保证数据的一致性。如转账案例,转账前账号 A 和账号 B 的钱的总数为 10000。转账后账号 A 和账号 B 的钱的总数应该还是 10000;(3) 隔离性(Isolation):当涉及到多用户操作同一张表时,数据库为会每一个用户开启一个事务。那么当其中一个事务正在进行时,其他事务应该处于等待状态。保证事务之间不会受影响。(4) 持久性(Durability):当一个事务被提交后,我们要保证数据库里的数据是永久改变的。即使数据库崩溃了,我们也要保证事务的完整性。

关于事务的隔离性,尤为重要。当多用户 (多线程) 同时操作同一张表时,如果没有隔离机制,可能会发生以下问题:

脏读:事务 A 读取了事务 B 刚刚更新的数据,但是事务 B 回滚了,这样就导致事务 A 读取的为脏数据,我们称之为脏读。如公司某财务人员更新公司入账报表时,在 DML 语句中的数字后少添加了一个 0,但是未提交,然后吃饭,吃饭回来,发现错误,然后更正后做了提交。而在吃饭期间,老板要求秘书查看一下报表,秘书看到的是少个 0 的数据。这就是脏读。

不可重复读:事务 A 读取同一条记录两次,但是在两次之间事务 B 对该条记录进行了修改并提交,导致事务 A 两次读取的数据不一致。它和脏读的区别是,脏读是事务 A 读取了另一个事务 B 未提交的脏数据,而不可重复读则是事务 A 读取了事务 B 提交的数据。多数情况下,不可重复读并不是问题,因为我们多次查询某个数据时,当然要以最后查询得到的结果为主。但在另一些情况下就有可能发生问题,比如,老板让 B 和 C 分别核对事务 A 操作的数据,结果可能不同,老板是怀疑 B 呢,还是 C 呢?

幻读:事务 A 在修改全表的数据,比如将字段 age 全部修改为 0 岁,在未提交时,事务 B 向表中插入或删除数据,如插入一条 age 为 25 岁的数据。这样导致事务 A 读取的数据与需要修改的数据不一致,就和幻觉一样。幻读和不可重复读的相同点:都是针对于另外一个已经提交的事务而言。不同点:不可重复读是针对于同一条记录来说的(delete 或 update 同一条记录),而幻读是针对于一批数据来说的(insert)

事务的隔离机制有以下四种:

1、未提交读(read uncommitted):就是不做隔离控制,可以读到“脏数据”,可能发生不可重复读,也可能出现幻读。2、提交读(read committed):提交读就是不允许读取事务没有提交的数据。显然这种级别可以避免了脏读问题。但是可能发生不可重复读,幻读。这个隔离级别是大多数数据库(除了 mysql)的默认隔离级别。 3、可重复读(repeatable read):为了避免提交读级别不可重复读的问题,在事务中对符合条件的记录上 排他锁,这样其他事务不能对该事务操作的数据进行修改,可避免不可重复读的问题产生。由于只对操作数据进行上锁的操作,所以当其他事务插入或删除数据时,会出现幻读的问题,此种隔离级别为 Mysql 默认的隔离级别。4、序列化(Serializable),在事务中对表上锁,这样在事务结束前,其他事务都不能够对表数据进行操作(包括新增,删除和修改),这样避免了脏读,不可重复读和幻读,是最安全的隔离级别。但是由于该操作是堵塞的,因此会严重影响性能。

相关语法格式如下:

查看数据库的当前隔离机制:select @@tx_isolation; 修改数据库的隔离机制:set transaction isolation level 机制名称 或者是 set tx_isolation= 机制名称 如:set transaction isolation level read uncommitted 或者 set tx_isolation=‘read-uncommitted’;

二、DCL 语言的操作语法

(1)创建用户:create user username@ip identified by newPassword;

(2)修改密码:alter user username@ip identified by newPassword;

(3)显示用户的权限:show grants for username@ip;

(4)授权语句:grant 权限 1,权限 2,…… on databaseName.* to username@ip;

DDL 权限名称: create、alter、drop、truncate、create view 等等

DML 权限名称: insert、delete、update

DQL 权限名称: select

(5)撤销权限:revoke 权限 1,权限 2,….. on databaseName.* from username@ip;

(6)删除用户:drop user username;

(7)权限生效语句:flush privileges;

“MYSQL 数据库的 TCL 语言和 DCL 语言是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-17发表,共计2640字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)